ORDER BY für MySQL+PHP
AndreasN
- php
Hallo ihr,
ich versteh es langsam nicht mehr, ich hab jetzt mehr als eine Stunde im Netz gesucht und bin eigentlich acih fündig geworden, dennoch bekomme ich es nie so hin, wie es überall steht.
Folgendes: Ich habe eine Artikel-Tabelle mit folgenden Feldern:
bild, vk_preis
Nun möchte ich sie so sortieren, dass, falls ein Bild vorhanden ist, diese Aritkel als erstes ausgegeben werden, dann natürlich in der richtigen Reihenfolge des Verkaufspreises (vk_preis).
Meine Idee: ORDER BY bild DESC, vk_preis ASC
So sollte es am Ende aussehen:
ArtNr Bild VK-Preis
00007 ja 1,99
00001 ja 3,49
00006 ja 4,99
00003 nein 5,99
00002 nein 6,00
00005 nein 6,20
00004 nein 6,99
Aber mit meinem Befehl kommt dies:
ArtNr Bild VK-Preis
00001 ja 3,49
00006 ja 4,99
00007 ja 1,99
00002 nein 6,00
00003 nein 5,99
00005 nein 6,20
00004 nein 6,99
Mein endgültiger Befehl:
FROM ".TabShopArtikel." WHERE warengruppennummer = '".$row_wgr[warengruppennummer]."' AND sprachen_nr = '".$lg."' AND sichtbar = 1 AND (kennzeichnung = 'K' OR kennzeichnung = 'S' OR kennzeichnung = 'k' OR kennzeichnung = 's') ORDER BY bild DESC, vk_preis ASC LIMIT ".$next.", ".$limit."");
yo,
von welchen datentyp is den die stpalte vk_preis ?
Ilja
yo,
von welchen datentyp is den die stpalte vk_preis ?
Ilja
Feld Typ Attribute Null Standard
vk_preis decimal(10,2) Nein 0.00
yo,
erst noch einen kleinen tipp, benutze den IN operator für die OR Verknüpfungen über die gleiche spalte, liest sich einfacher.
zu deinem problem, ich kann so auf den ersten blick kein problem in der abfrage erkennen. aber hast du die komplette query mal ausgegeben und dann an einer konsole ausgeführt, also direkt an die datenbank geschickt ohne eine andere applikation dazwischen, bzw. poste mal hier die reine sql abfrage ohne variablen als platzhalter.
ein anderes problem könnte die spalte bild sein, welche werte dort genau drinne stehen, schließlich wird danach zuerst sortiert. prüfe mal die werte die dort drinne stehen, besonders die längen der inhalte, um leerzeichen aufzusprüren.
Ilja
yo,
ein anderes problem könnte die spalte bild sein, welche werte dort genau drinne stehen, schließlich wird danach zuerst sortiert. prüfe mal die werte die dort drinne stehen, besonders die längen der inhalte, um leerzeichen aufzusprüren.
Ilja
Das wird es sein, da meine Bild-ID wie folgt aufgebaut ist:
YYYYmmddHHiiss
20070429143402
Daher stehen natürlich die aktuellsten Bilder ganz oben.
Es wird halt nicht überprüft ob überhaupt ein Bild vorhanden ist, sondern es wird nach numerischer Reihenfolge sortiert. Danke für den Tipp, ich hoffe ich kann es irgendwie beeinflussen.
Gruß
Andreas
hi,
Das wird es sein, da meine Bild-ID wie folgt aufgebaut ist:
YYYYmmddHHiiss
20070429143402Daher stehen natürlich die aktuellsten Bilder ganz oben.
Wenn du das aber bei der Sortierung überhaupt nicht berücksichtigen willst - dann solltest du nicht danach sortieren :-)
Es wird halt nicht überprüft ob überhaupt ein Bild vorhanden ist, sondern es wird nach numerischer Reihenfolge sortiert. Danke für den Tipp, ich hoffe ich kann es irgendwie beeinflussen.
Unter der Annahme, dass "kein Bild vorhanden" gleichbedeutend mit dem Spaltenwert NULL ist - bastle dir mittels IF und ISNULL einen Wert zusammen, welches für nicht-vorhandenes Bild 0, für vorhandenes 1 liefert - und verwende diesen als erstes Sortierkriterium.
gruß,
wahsaga
Unter der Annahme, dass "kein Bild vorhanden" gleichbedeutend mit dem Spaltenwert NULL ist - bastle dir mittels IF und ISNULL einen Wert zusammen, welches für nicht-vorhandenes Bild 0, für vorhandenes 1 liefert - und verwende diesen als erstes Sortierkriterium.
gruß,
wahsaga
Richtige Annahme!
Könntest du es mir eventuell bitte an einem Code-Beispiel genauer erklären, dass ist Neuland für mich mit "ISNULL".
Gruß,
Andreas
hi,
Könntest du es mir eventuell bitte an einem Code-Beispiel genauer erklären, dass ist Neuland für mich mit "ISNULL".
http://dev.mysql.com/doc/refman/4.1/en/comparison-operators.html#function_isnull
http://dev.mysql.com/doc/refman/4.1/en/control-flow-functions.html#function_if
gruß,
wahsaga
hi,
Könntest du es mir eventuell bitte an einem Code-Beispiel genauer erklären, dass ist Neuland für mich mit "ISNULL".
http://dev.mysql.com/doc/refman/4.1/en/comparison-operators.html#function_isnull
http://dev.mysql.com/doc/refman/4.1/en/control-flow-functions.html#function_ifgruß,
wahsaga
Vielen Dank, dass war die Lösung (Nummer 1).
Doch dank deinem Link hab ich hab auf der Seite noch ein wenig weiter gesurft und am Ende diese Lösung für mich entdeckt:
ORDER BY
bild <> '' DESC,
vk_preis ASC
Gruß