Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Gruppierte Werte nach bestimmter Zeile aufsteigend ordnen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:12 Uhr.