count und group by für blätterfunktion funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • count und group by für blätterfunktion funktioniert nicht

    Hallo,

    mit dieser Abfrage möchte ich für eine blätterfunktion die Summe aller Datensätze ermitteln (Bsp. aus http://www.dclp-faq.de/q/q-mysql-seitenweise.html)

    Query:

    SELECT COUNT(p_id) ,(YEAR(CURRENT_DATE)-YEAR(p_age))-(RIGHT(CURRENT_DATE,5)<RIGHT(p_age,5)) p_alter FROM profiles WHERE p_************ = 'm' GROUP BY p_id HAVING p_alter > '18'

    // Abfrage von count(p_id)...
    echo mysql_result($count_result,0);

    AUSGABE:
    0

    Wenn ich jetzt mehere gleiche p_id's vergebe (z.B. alle User bekommen als p_id die 1), erhalte ich als Ausgabe von count(p_id)...
    die anzahl der gleichen p_id's. Ich denke es liegt an der group by Klausel, die ich aber aufgrund der Altersbestimmung mitaufnehmen musste. Kann mir da jmd weiterhelfen?

    Ich grunde möchte ich nur wissen wieviele Treffer diese Query landet:
    SELECT p_id, p_name, p_pic, p_plz, p_ort ,(YEAR(CURRENT_DATE)-YEAR(p_age))-(RIGHT(CURRENT_DATE,5)<RIGHT(p_age,5)) p_alter FROM profiles WHERE p_************ = 'm' HAVING p_alter > '18' ORDER BY p_plz

    Vielleicht ist mir ja so leichter zuhelfen?!

  • #2
    Ich vermute, dass du >=18 meinst ...
    noch ein Tipp: mit der Variable $sql_alter sparst du Tipparbeit und sorgst für mehr Übersicht.
    PHP-Code:
    $sql_alter '(YEAR(CURRENT_DATE)-YEAR(p_age))
      -(RIGHT(CURRENT_DATE,5)<RIGHT(p_age,5))'
    ;

    $count_result mysql_query("SELECT count(*)
      FROM profiles WHERE p_************='m' AND 
    $sql_alter>=18");
    list(
    $anzahl) = mysql_fetch_row($count_result);

    $result mysql_query("select *, $sql_alter as p_alter
      FROM profiles WHERE p_************ = 'm' AND p_alter>=18
      ORDER BY p_plz LIMIT ..."
    );
    ... 
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Danke - haut hin !

      Kommentar


      • #4
        wenn du nicht wissen willst, wieviel datensätze du bekommst, sondern die auch alle ausgebenwillst, kannst du doch auch mysql_num_rows nehmen oder?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          mysql_num_rows habe ich dann auch in der zweiten(eigentlichen) Query genommen...

          Habe aber ein ganz anderes Problem und zwar, kann ich jetzt nicht mehr das Alter des users aufrufen. Mit AS p_alter wollte er ja wieder das GROUP BY haben und dann wären wir ja wieder bei alten Problem...

          Also bei dieser Query möchte ich zusätzlich das Alter abrufen:

          SELECT COUNT(p_id) FROM profiles WHERE p_************ = 'm' AND (YEAR(CURRENT_DATE)-YEAR(p_age))-(RIGHT(CURRENT_DATE,5)<RIGHT(p_age,5)) >= '18'

          Kann mir da jmd helfen?

          Kommentar


          • #6
            PHP-Code:
            $sql_alter '(YEAR(CURRENT_DATE)-YEAR(p_age))
              -(RIGHT(CURRENT_DATE,5)<RIGHT(p_age,5))'
            ;

            $result mysql_query("select *, $sql_alter as p_alter
              FROM profiles WHERE p_************ = 'm' AND p_alter>=18
              ORDER BY p_plz LIMIT ..."
            );

            $anzahl=mysql_num_rows($result); 
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Dank Mr, haut hin...

              So sieht jetzt die komplette Query aus:

              SELECT p_id, p_name, p_pic, p_plz, p_ort, (YEAR(CURRENT_DATE)-YEAR(p_age))-(RIGHT(CURRENT_DATE,5)<RIGHT(p_age,5)) p_alter FROM profiles WHERE p_************ = 'm' AND (YEAR(CURRENT_DATE)-YEAR(p_age))-(RIGHT(CURRENT_DATE,5)<RIGHT(p_age,5)) >= '18' ORDER BY p_plz LIMIT 0,2

              Ist das so vernüpftig geschrieben oder sollte ich lieber beim where Teil auf den schon vorhanden ALIAS p_alter zurückgreifen und mit group by arbeiten oder ist das so ok?

              Kommentar

              Lädt...
              X