erweiterte MySQL-Abfrage




eUncle
04.05.2008, 19:35 Uhr
Hab grad überhaupt kein klaren Kopf und alles ist momentan bissl stressig und ich bekomm mein Problemchen nicht gelöst...
Vlt weiß es ja einer von euch:



Ich möchte mit einer db-Abfrage den Datensatz mit der nächst niedrigeren ID holen - mein bisheriger Schnipsel:

PHP-Code:
$abfrage "SELECT * FROM gallery ORDER BY id ASC WHERE id < '$id' LIMIT 1"
Jedoch funktioniert das nicht, wenn ich das '<' durch ein '=' ersetze, funktionierts, sprich der Fehler muss an dem '<' liegen



(Falls die Frage/Aufgabe noch nicht ganz klar sein sollte, kann ich ein kleines Bsp machen...)



Danke



#E#
...ich glaube jetzt aber noch viel eher, dass es am ORDER BY liegt; wenn ich folgendes mache:
PHP-Code:
$abfrage "SELECT * FROM gallery WHERE id < '$id' LIMIT 1"
...nimmt er immer die niedrigste ID, warum auch immer - vlt weil's nicht geordnet ist...

Wenn ich das '<' durch ein '>' ersetze, den Rest aber gleich lasse, nimmt er immer die nächst höhere... was jetzt eigentlich auch merkwürdig ist - ich glaub ich versteh die Welt nicht mehr
#1




Gast
04.05.2008, 20:00 Uhr
Machs doch so:
PHP-Code:
$id 1;
$abfrage "SELECT * FROM gallery WHERE id = '$id' LIMIT 1"
#2

eUncle
04.05.2008, 20:05 Uhr
nene, mein Fehler: es kann gut sein, dass zwischendrin eben IDs fehlen, so kann die ID-Spalte mal so aussehn:

3
43
44
45
67
89
90
91


...wenn ich jetzt bei 67 bin, will ich eben mit der Abfrage den Datensatz von id=45 haben, sprich die nächst niedrigere ID - das müsste er mit > und < ja machen - macht er aber nicht; darum bin ich echt bald am Verzweifeln...
#3

Gast
04.05.2008, 20:30 Uhr
Achso
Dann könntest du zuerst alle IDs auslesen und in ein Array speichern.
Dem Array werden ja Indizes (Zahlen bei 0 beginnend) angegeben.
Dann einfach den Wert mit dem gewünschten Arraystück (gesamt/gewünschter eintrag-1) benutzen für die neue gesamtabfrage.

Zwar nicht sehr performant, aber nen Workaround
#4




Gast
04.05.2008, 20:30 Uhr
aus `ASC´ mach `DESC´ ... sollte dein Problem lösen :-)

Weil bei ASC wird der Erste Datensatz genommen wenn id < 67. Wenn du jetzt die Sortierung Absteigend machst hast du direkt den gewünschten Datensatz am Haken...
#5

Gast
04.05.2008, 20:35 Uhr
Noch ein kleiner Zusatz:

`ORDER´-Zusatz sollte immer hinter der `WHERE´-Klausel stehen!
#6

eUncle
04.05.2008, 21:36 Uhr
@henry: Richtig. So etwas in dieser Art könnte man auch machen, dann wird's aber auch schnell unübersichtlich

@TBO: Richtig. Die Syntax ist vermutlich auch nicht ganz richtig xD
und in der obigen, gar nicht funktionierenden Abfrage ist es egal ob DESC oder ASC, er nimmt gar nix...

Ich muss morgen mal schaun, dass die Syntax stimmt...



#E#
ach...fffffffffffffffffffffffffff!!!!!!!!!!!!!!!!! !!!!!111111111einseinhundertelf11111!!111!!11
--> @TBO: Wer immer du auch bist ^^...hast mir die Augen geöffnet:
--> Ich habe meine zwei Abfragen total vertauscht gehabt:
  • bei '<' muss "WHERE id < '$id' ORDER BY id DESC LIMIT 1" hin
  • bei '>' muss "WHERE id > '$id' ORDER BY id ASC LIMIT 1" hin
    (hatte da bei den zwein ASC und DESC genau vertauscht gehabt => Denkfehler... :klatsch:

    Danke Dir vielmals, hast mich soeben mit einigen Stunden Schlaf bereichert
#7

 

Andere Themen im Webentwicklung & Programmierung Forum


Ähnliche Artikel

Facebook

Jahresarchive