MySQL Wert der am häufigsten vor kommt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MySQL Wert der am häufigsten vor kommt

    Ich have folgenden Code:

    Quellcode

    1. $meistbestell = mysql_fetch_array(mysql_query("select vn ,count(vn) as vn from bestellung group by vn ORDER BY vn DESC LIMIT 1"));
    2. echo $meistbestell[0]." (".$meistbestell[1]." Bestellungen)";


    Damit wird mir der Wert ausgegeben, der am häufigsten vorkommt und dahinter in Klammern wie oft er vorkommt. Mein Problem ist aber nun, das es 2 Werte genau 56 mal gibt. Also kommt wenn ich F5 drücke immer ein anderes Ergebnis. Ich würde es gerne so haben, dass wenn mehrere Werte gleich oft vorkommen, diese auch alle aufgelistet werden.
    Etwa so: Wert1 / Wert2 (56 Bestellungen)
  • dann sortierst du zusätzlich noch nach deiner id.

    Quellcode

    1. ... ORDER BY vn,id DESC LIMIT 1


    Du solltest dir angewöhnen MySQL Schlüsselwörter groß zu schreiben und nicht 2 Felder gleich zu benennen, dann kannst du auch mit fetch_assoc arbeiten, welches dir ein assoziatives Array zurückliefert, so dass du in deinem Code nicht die unübersichtlichen numerischen Indizes nutzen muss.

    Quellcode

    1. $meistbestell = mysql_fetch_assoc(mysql_query("SELECT vn ,count(vn) as count_vn FROM bestellung GROUP BY vn ORDER BY count_vn,id DESC LIMIT 1"));
    2. echo $meistbestell['vn']." (".$meistbestell['count_vn']." Bestellungen)";
  • Ich habe deine bessere Variante mit mysql_fetch_assoc jetzt eingebaut. Jedoch funktioniert dies nicht:

    Quellcode

    1. ORDER BY vn,id DESC LIMIT 1


    Es geht nur ohne das zusätzliche "id". So wird mir nämlich immer nur der Wert ausgebenen, der am wenigsten vorkommt. ASC oder DESC hat keinen Einfluss.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von x16 ()

  • x16 schrieb:

    Ich habe deine bessere Variante mit mysql_fetch_assoc jetzt eingebaut. Jedoch funktioniert dies nicht:

    Quellcode

    1. ORDER BY vn,id DESC LIMIT 1


    Es geht nur ohne das zusätzliche "id". So wird mir nämlich immer nur der Wert ausgebenen, der am wenigsten vorkommt. ASC oder DESC hat keinen Einfluss.


    Achte in der veränderten Variante auch auf den veränderten Feldnamen, den ich benutzt habe.

    Quellcode

    1. ORDER BY count_vn,id


    daraus machst du

    Quellcode

    1. ORDER BY count_vn DESC,id


    Wenn man mehrere Spalten sortiert, kann man natürlich auch für jede Spalte die Reihenfolge festlegen.
  • So sieht meine momentane Ausgabe aus:

    Quellcode

    1. $meistbestell = mysql_fetch_assoc(mysql_query("SELECT vn ,count(vn) as count_vn FROM bestellung GROUP BY vn ORDER BY count_vn DESC,id"));
    2. $wenigbestell = mysql_fetch_assoc(mysql_query("SELECT vn ,count(vn) as count_vn FROM bestellung GROUP BY vn ORDER BY count_vn ASC,id"));
    3. <tr>
    4. <td style="height: 30px;">Verkäufer mit den meisten Bestellungen:</td>
    5. <td><?php echo $meistbestell['vn']." (<b>".$meistbestell['count_vn']."</b> Bestellungen)"; ?></td>
    6. </tr>
    7. <tr>
    8. <td style="height: 30px;">Verkäufer mit den wenigsten Bestellungen:</td>
    9. <td><?php echo $wenigbestell['vn']." (<b>".$wenigbestell['count_vn']."</b> Bestellungen)"; ?></td>
    10. </tr>
    Alles anzeigen


    Und so sieht die Ausgabe aus:

    Quellcode

    1. Verkäufer mit den meisten Bestellungen: 10 (H***) (56 Bestellungen)
    2. Verkäufer mit den wenigsten Bestellungen: 22 (J***) (1 Bestellungen)



    ich möchte aber, dass wenn mehrere Verkäufer 56 Bestellungen haben, diese auch alle aufgelistet werden. Es gibt momenatan nämlich 2 Leute mit 56 Bestellungen. Und es gibt etwa 5 Leute mit nur einer Bestellung. Diese 5 Leute sollen dann alle mit ausgegeben werden.
    Etwa so:

    Quellcode

    1. Verkäufer mit den meisten Bestellungen: 10 (H***) / 09 (S***) (56 Bestellungen)
    2. Verkäufer mit den wenigsten Bestellungen: 22 (J***) / 1 (D***) / 5 (W***) / 7 (E***) / 11 (P***) (1 Bestellungen)