Seite 1 von 1
mysql rechnen mit dem Ergebnis von COUNT(*) AS
Verfasst: 17.02.2007 23:40
von Xwitz
Hallo,
ich möchte eine Abfage nach der Differenz zwischen dem Wert (anzahl) aus COUNT(*) AS und einer Variable $var sortieren.
Das:
Code: Alles auswählen
$sql = "SELECT COUNT(*) AS anzahl, eintrag_id FROM tabelle WHERE t_id = *** AND t_id ... GROUP BY eintrag_id ORDER BY anzahl DESC";
funktioniert (das ist nur noch nicht das was ich will) und
funktioniert, wenn anzahl eine Spalte ist. Aber anzahl ist keine Spalte und das:
Code: Alles auswählen
$sql = "SELECT COUNT(*) AS anzahl, eintrag_id FROM tabelle WHERE t_id = *** AND t_id ... GROUP BY eintrag_id ORDER BY ABS(anzahl - " . $var . ") DESC"
funktioniert nicht. Da bekommen ich die Fehlermeldung, Unknown column 'anzahl' in 'order clause'.
Wie kann ich mein Anliegen realisieren?
Verfasst: 18.02.2007 00:12
von Miriam
Ich verstehe den Sinn dieser Query nicht ganz aber gut:
Versuche -->
Code: Alles auswählen
$sql = "SELECT COUNT(t_id) AS anzahl, eintrag_id FROM tabelle WHERE t_id = *** AND t_id ... GROUP BY eintrag_id ORDER BY ABS(t_id - " . $wortzahl . ") DESC"
Verfasst: 18.02.2007 00:25
von Xwitz
Da passiert da gleiche, hätte mich auch etwas gewundert, wenn es was gebracht hätte.
Ich habe die Variable jetzt auch in dem dritten Codeabschnitt durch $var ersetzt, falls es dem Verständnis hilft.
Im ersten Codeabschnitt würde die eintrag_id an erster Stelle stehen, die am häufigsten als Paar mit einer der t_ids Auftritt. Ich suche aber nicht nach den meisten Übereinstimmungen sondern nach einer bestimmten Häufigkeit ($var) und möchte die, die von $var abweichen aber auch noch haben, nur eben mit steigender Abweichung.
PS: Durch DESC ist es im Moment verkehrt herum aber das ist nicht der Grund warum die Abfrage nicht geht.
Verfasst: 18.02.2007 00:32
von Miriam
Kannst Du mal bitte ein Tabellenbeispiel geben?
Verfasst: 18.02.2007 00:42
von Xwitz
Code: Alles auswählen
|eintrag_id|t_id|
|1 |1 |
|1 |2 |
|1 |3 |
|2 |2 |
|2 |4 |
|3 |2 |
|3 |5 |
|4 |5 |
Wenn in WHERE für t_id die 2 und die 1 angegeben ist und $var = 3, sollte die eintrag_id 1 (mit zwei Paaren) als erstes kommen dann die 2 und 3 (mit je einem Paar).
Für die t_id 5 und 2 und $var = 1 sollten die eintrag_ids 4, 2 und 1 (mit je einem Paar) zu erst kommen und dann 3 (mit zwei Paaren).
EDIT: die Bedingung $var = * ergänzt.
PS: eintrag_ids mit Null Paaren sollen aber nicht in der Ausgabe dabei sein. Die Variante, daß $var kleiner ist als die minmal vorkommende Zahl an Paaren kann nicht eintreten, falls das hilft.
Verfasst: 18.02.2007 12:09
von Miriam
Mal sehen, ob ich Dich richtig verstanden habe:
Code: Alles auswählen
$sql = "SELECT count(eintrag_id) as anzahl, ABS(count(eintrag_id) - $var) as abweichung, eintrag_id FROM tabelenname WHERE t_id in (1,2) GROUP BY eintrag_id order by abweichung asc, anzahl desc, eintrag_id asc
Verfasst: 18.02.2007 17:14
von Xwitz
Das:
Code: Alles auswählen
$sql = "SELECT ABS(COUNT(*) - $var) AS d_anzahl, eintrag_id FROM tabelle WHERE t_id IN ('$in') GROUP BY eintrag_id ORDER BY d_anzahl ASC";
scheint auszureichen, vielen Dank. Im Moment habe ich was anderes verschlimmbessert und muß es später noch mal genau prüfen.