Archiv verlassen und diese Seite im Standarddesign anzeigen : Gruppierte Werte nach bestimmter Zeile aufsteigend ordnen
sanktusm 04-03-2010, 14:04 Hallo ich habe hier eine MySql - Abfrage: Es soll immer der niedrigste Wert der Zeile 'folge' aufgerufen werden. Leider wird jedoch immer der niedrigste Wert der Zeile menue.id ausgegeben. Wie kann ich das manipulieren?
SELECT
sprachen.sprache,
menue.id as firstid
FROM
sprachen,
menue,
menue_area
WHERE
sprachen.id = menue.sprache AND
menue_area.menue_area = 'Kopf-Navigation' AND
menue.menue_area = menue_area.id
GROUP BY
menue.sprache
ORDER BY
menue.folge ASC
LIMIT
4;
AmicaNoctis 04-03-2010, 14:07 Hallo,
nimmst du bitte den PHP-Code weg, das hier ist das SQL-Forum? ;)
Danke
Edit: da ist zwar immer noch PHP-Session-Kram drin (den du bitte rausnimmst), aber ok:
Du sortierst zwar danach, aber es fehlt in den Spaltenreferenzen (zwischen SELECT und FROM), daher ist es im Ergebnis nicht dabei.
Amica
sanktusm 04-03-2010, 14:39 wenn ich die Anweisung so schreibe, gibt es das selbe problem:
SELECT
sprachen.sprache,
menue.id as firstid,
menue.folge
FROM
sprachen,
menue,
menue_area
WHERE
sprachen.id != '' AND
sprachen.id = menue.sprache AND
menue_area.menue_area = 'Kopf-Navigation' AND
menue.menue_area = menue_area.id
GROUP BY
menue.sprache
ORDER BY
menue.folge ASC
LIMIT
4;
AmicaNoctis 04-03-2010, 14:40 Dann musst du es genauer erklären. Mehr war aus deiner Anfrage nicht rauszuholen.
Vermutung/Tipp: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
sanktusm 04-03-2010, 14:51 Es geht hier darum, dass immer die erste ID unter der jeweiligen Sprache angewählt wird. Eben dieser Menuepunkt dessen Wert in der Zeile folge am kleinsten ist.
So wie es hier programmiert wurde, wird immer der kleinste Wert der Zeile id angewählt.
Also:
id folge
1 3
2 1 <= dieser Wert soll ausgegeben werden
3 2
SELECT
sprachen.sprache,
menue.id as firstid,
menue.folge
FROM
sprachen,
menue,
menue_area
WHERE
sprachen.id != '' AND
sprachen.id = menue.sprache AND
menue_area.menue_area = 'Kopf-Navigation' AND
menue.menue_area = menue_area.id
GROUP BY
menue.sprache
ORDER BY
menue.folge ASC
LIMIT
4;
AmicaNoctis 04-03-2010, 14:57 Ok, dann schau dir mal den Link in meinem letzten Beitrag an.
Ansonsten noch ein Tipp: Verwende die korrekte Terminologie, sonst versteht man dich schlecht. Folge ist keine Zeile, sondern eine Spalte (oder Attribut) der Tabelle (oder Relation) menue
sanktusm 04-03-2010, 15:22 welche funktion soll ich denn nun benutzen und wie
AmicaNoctis 04-03-2010, 15:27 Ich dachte da an min, denn du willst ja das Minimum der Werte. Wir sind wohl ein bisschen lesefaul? ;)
sanktusm 04-03-2010, 15:40 Ich will ja einen bestimmten Wert der Zeile, dessen spalte folge am kleinsten ist.
kann ich min auch in der WHERE clause benutzen?
AmicaNoctis 04-03-2010, 15:41 Dort macht es keinen Sinn. Das gehört in die Spaltenreferenzen. Statt menue.folge schreibst du einfach min(menue.folge).
Edit: achso, du willst trotzdem die zugehörige ID? Dann geht es doch nicht so. Dann ist das hier (http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html) was für dich, ich empfehle die Variante ganz unten mit dem left join.
sanktusm 04-03-2010, 16:00 SELECT
sprachen.sprache,
menue.id as firstid
FROM
menue,
sprachen,
menue_area
WHERE
sprachen.id != '".$_SESSION['sprachen_id']."' AND
sprachen.id = menue.sprache AND
menue_area.menue_area = 'Kopf-Navigation' AND
menue.menue_area = menue_area.id AND
menue.folge = (SELECT
min(menue.folge)
FROM
sprachen,
menue,
menue_area
WHERE
sprachen.id != '".$_SESSION['sprachen_id']."' AND
sprachen.id = menue.sprache AND
menue_area.menue_area = 'Kopf-Navigation' AND
menue.menue_area = menue_area.id
GROUP BY
menue.sprache
) ;
AmicaNoctis 04-03-2010, 16:02 Hm, da hast du dich also für die ineffizienteste Variante von den dreien entschieden... Hoffe, du hast nicht so viele Datensätze.
|
|