MySQL Wert der am häufigsten vor kommt

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • MySQL Wert der am häufigsten vor kommt

    Ich have folgenden Code:

    Source Code

    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.

    Source Code

    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.

    Source Code

    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:

    Source Code

    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.

    The post was edited 1 time, last by x16 ().

  • x16 wrote:

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

    Source Code

    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.

    Source Code

    1. ORDER BY count_vn,id


    daraus machst du

    Source Code

    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:

    Source Code

    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>
    Display All


    Und so sieht die Ausgabe aus:

    Source Code

    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:

    Source Code

    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)