Select bei bestimmten Wert einer Spalte abbrechen

kamp

Grünschnabel
Hallo!

Ich habe eine Tabelle, mit folgender Struktur:

id | name | text
-------------------
1 | - | Absatz1
2 | test | testtext
3 | abc | abctext
4 | - | Absatz2
5 | zzz | zzztext
...usw.

Ich lese die gesamte Tabelle aus und erzeuge daraus mit PHP eine Übersicht. Überall wo name ein "-" ist, gilt der text als Absatzüberschrift. Es gibt keine bestimmte Anzahl an Zeilen zwischen den name="-". Nun möchte ich eine Funktion realisieren, wenn ich auf die Absatzüberschrift klicke, nur noch die Zeilen bis zum nächsten Absatz ausgelesen werden. Somit habe ich schon die Start-id dafür. Aber wie sieht da die SQL Abfrage aus? Ich denke das müsste sich mit BETWEEN realisieren lassen? So hätte ich mir das gedacht, funktioniert aber nicht.

Code:
SELECT *
FROM tabelle
BETWEEN id="1", name="-"
AND name="-"
ORDER BY id ASC
 
item: Die ID ist hoffentlich eine Zahl. Also behandle sie auch so. Nix mit Anführungszeichen wie du es in deinem Beispiel hast

item: BETWEEN geht nicht, da du die Zeile mit dem nächsten '-' ja nicht haben willst.

item: Das Ende muss seperat bestimmt werden. Also mit einer eigenen Unterabfrage, welche das nächste '-' nach dem Startpukt bestimmt

Annahme: Du arbeites mit MySQL

SQL:
SELECT
	*
FROM
	test 
WHERE
	id >= 1
	AND id < (
				SELECT id 
				FROM test 
				WHERE id > 1 AND name = '-' 
				ORDER BY id 
				LIMIT 1)
ORDER BY id ASC
Zu ändern: die ID, welche du aus dem PHP ziehst, die musst du im WHERE und im WHERE der Unterabfrage ändern!
 
Zuletzt bearbeitet von einem Moderator:
Danke!

Die " sind noch von der Übernahme aus dem PHP-Code übrig geblieben. ;) Ich hab hier mal wieder viel zu kompliziert gedacht.
 
Jetzt hab ich dazu noch eine Frage: Ich möchte nun die Abfrage nach der Zeile mit name="-" durchführen. Ich habe allerdings nur die id einer Zeile, die nicht name="-" hat. Mit folgendem Code bekomme ich aber immer nur die id der ersten Zeile mit name="-" in der Tabelle. Ich möchte aber die id erhalten, die nach oben die nächste ist. Was hab ich da falsch gemacht?

Code:
SELECT
    *
FROM
    tabelle
                WHERE id < 8 AND name = '-' 
LIMIT 1

Ist das LIMIT 1 das Problem? Wenn ich es weg lasse, bekomme ich alle Zeilen oberhalb wo name="-", ich möchte aber nur die nächste(=letzte?)


EDIT:

ok... wieder zu kompliziert gedacht. Die Lösung ist:

Code:
SELECT
    MAX(id)
FROM
    tabelle
                WHERE id < 8 AND name = '-'
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück