• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Von Bis Abfrage

stenz

Mitglied
Hallo,
ich hab eine DB erstellt, dabei sind alle Datensätze numeriert.
Jedoch will ich z.B. die Datensätze ab Nummer 30 bis 40 abfragen. Wie geht das?
Habe es mit AND versucht klappt irgendwie nicht.
Mein Befehl sah so aus
Select * from Metall where 'nummer' > 30 AND 'nummer' <= 40
klappt irgendwie nicht.. :(
Hoffe auf eure Hilfe.

Danke
Stenz
 
Werbung:
Werbung:
oh man... :( jetzt kommt diese fehlermeldung
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''metall' LIMIT 30, 40' at line 1
Bei beiden Vorschlägen... Könntet ihr mir mal sagen, welche Infos ihr braucht um diesen Fehler näher analysieren zu können :)?

Stenz
 
Du brauchst die Abfrage um das analysieren zu können, es ist einfach ein Syntaxfehler.
 
Und was kann ich machen um diesen Syntax Fehler zu beheben :)

Abfrage war jeweils
Select * from 'Metall' where 'nummer' > 30 AND 'nummer' <= 40
Und
SELECT * FROM Tabellenname LIMIT 30, 40

Stenz
 
Werbung:
Die Hochkommas sind falsch, in mysql musst du Backticks nehmen , die zweite Abfrage führt zu keinem Syntaxfehler
 
Danke hat funktioniert, es waren die Backticks :p Anfängerfehler halt^^ hab einfache Hochkommata verwendet. :)

Danke
stenz
 
Da ich nicht weiß welches Statement Du nun tatsächlich verwendet hast, noch folgender Hinweis:

Die beiden Statements

Code:
Select * from 'Metall' where 'nummer' > 30 AND 'nummer' <= 40

und

Code:
SELECT * FROM Tabellenname LIMIT 30, 40

ergeben aber 2 völlig verschiedene Sachen.

Bei Letzterem erhälst Du die Datensätze 30 bis 39 die in der Datenbank stehen, was schonmal nicht dem von dir gewünschten Bereich entspricht. Wer sagt dir, dass es überhaupt so viele in der Datenbank gibt? Und selbst wenn steht diese Abfrage nicht im Zusammenhang mit deiner Spalte "nummer".

Ersteres Statement ist doch genau das was Du willst. Du willst alle Datensätze erhalten die bei "nummer" einen wert zwischen 30 und 41 haben (also 31 bis 40). In deinem Statement im ersten Post hast Du Hochkommata verwendet. Das sollte das Problem sein. Vermutlich wolltest Du damit den Spaltennamen "nummer" maskieren, was durchaus sinnvoll ist, nur sind Hochkommata der falsche Weg. Du brauchst wie Du schon richtig erkannt hast dafür Backticks. Also:

Code:
Select * from `metall` where `nummer'`> 30 AND `nummer` <= 40
 
Werbung:
Oh, Mist, stimmt, hast recht. Also wäre

Code:
SELECT * FROM Tabellenname LIMIT 30, 10

korrekt.
 
Werbung:
Um Sortierung ging es nicht. Und zudem wäre auch dieses o.g. Statement mit dem Limit nicht das was der Topic-Eröffner eigentlich beabsichtigte.
 
threadi schrieb:
SELECT * FROM Tabellenname LIMIT 30, 10

Das würde die Datensätze 31 bis 40 der Ergebnismenge zurückgeben.

MySQL gestattet auch die Verwendung bestimmter Schlüsselwörter als Bezeichner ohne Anführungszeichen, da viele Benutzer sie in der Vergangenheit bereits eingesetzt haben.

Ich liebe diese Konsequenz. :)

@crash: Warum Backticks nur bei reservierten Wörtern?
 
Werbung:
Die Datensätze sollten aber doch nach nummer sortiert sein, und nicht nach Name, ID oder Haarfarbe? Sonst bekommt man mit LIMIT möglicherweise eine in der Nummerierung völlig wirre Sache zurück.
 
Warum redet ihr immer wieder von Limit, Limit ist falsch und gibt ein anderes Ergebnis aus als gewünscht (was im Übrigen ja schon oft genug gesagt wurde)?
Code:
Select * from 'Metall' where 'nummer' > 30 AND 'nummer' <= 40 ORDER BY `nummer` ASC
 
Backticks sind einfach unleserlich, länger und man vertippt sich schnell (wie bei sysop).

Code:
SELECT * FROM Metall WHERE nummer BETWEEN 30 AND 40 ORDER BY nummer
guter Stil ist außerdem die eigentlich SQL-Anweisungen in GROSSBUCHSTABEN zu schreiben und statt "*" immer konkret anzugeben welche Felder man haben möchte, falls man mal etwas ändert fällt einem so die Fehlersuche leichter.

Beispiel: Ich stelle meine Tabelle um, dass sie statt eines einfachen Wertes eine Id enthält und benenne das Feld entsprechend um, da fällt mir im meinem Script sofort auf, dass der alte Wert sich geändert hat (sicher viele Fehler). Dann kann ich das entweder überall umbenennen oder mit AS alterfeldname das zumindstens vorübergehend fixen.
 
Werbung:
Zurück
Oben