Mit MySQL erst %xy und dann %xy% anzeigen

Teilzeitphilosoph

Erfahrenes Mitglied
Moinz.
Kennt sich jemand mit MySQL gut aus? Ich hab folgendes Problem: Eine Datenbank enthält so was hier in der Kurzfassung

Altes Haus
Haus 1
Haus 2
Neues Haus

Jetzt möchte ich, dass mein Select

Haus 1
Haus 2
Altes Haus
Neues Haus

ausgibt. Der Grundgedanke war so etwas wie

WHERE name like haus% and %haus%

aber da hab ich zu simpel gedacht, denn so klappt es nicht. Gibt es da ne Lösung für? Ich hab was von MATCH/AGAINST gehört aber die Tabelle hat nix mit Fulltext bekommen und kriegt es -leider- auch nicht. Da hab ich keinen Einfluss drauf. :-(

-bedank-
TZP
 
Normalerweise hat der WHERE-Part keinen Einfluss auf die Sortierung.

Auf die Schnelle kommt mir nur gerade ein UNION auf bereits sortierte Recordsets in den Sinn

SQL:
SELECT *
FROM
	(SELECT *
	FROM table
	WHERE name like 'haus%'
	ORDER BY name) AS T1
UNION 
SELECT *
FROM
	(SELECT *
	FROM table
	WHERE name like '%haus%'
	ORDER BY name) AS T2

Nachtrag:
Sowas könnte auch gehen...
SQL:
SELECT 
	*, 
	CONCAT(IF(name LIKE 'haus%', 'A', 'B'), name) AS sort
FROM table
WHERE name like '%haus%'
ORDER BY sort
 
Zuletzt bearbeitet von einem Moderator:
item: Gibt es eine Fehlermeldung?
item: Mit was testest du?
item: Hast du das SQL für dich angepasst (ich hoffe es doch)?
 
hmm wie wärs mit was in diese Richtung?

SQL:
case when name like 'haus%' then 1 
          when name like 'A%' and name like '%haus%' then 2
          when ... then 3
          when ... then 4
          when ... then 5 end as Sort,

und dann
ORDER BY
Sort
 
Zuletzt bearbeitet von einem Moderator:
Interessante Methode. Kannte ich auch noch nicht. Aber bei einem Schnellen Test sehe ich, dass die Sortierung innerhalb der 2 Gruppen zufällig ist.

Mit dem folgenden kommt es richtig

SQL:
SELECT * FROM `tabelle`
ORDER BY `name` LIKE 'Haus%' DESC, `name`
 
Zuletzt bearbeitet von einem Moderator:
So...ich hab es jetzt mit 3 Abfragen lösen können. Das geht aber kann man das zusammenfassen? Oder ist das nich gut wegen der Lesbarkeit? Mir mangelt es da ein wenig an praktischer Erfahrung in SQL.

Code:
select * from besitz where (name like 'haus %'); 
select * from besitz where (name like 'haus%' and name not like 'haus %'); 
select * from besitz where (name like '%haus%' and name not 'haus%' and name not like 'haus %')

Und das sieht dann so aus

Haus 1
Haus 2
Haus 3
Hausgarten 1
Hausgarten 2
Altes Haus
Neues Haus hinten links

Also quasi zuerst das, wo das Suchwort alleine steht. Dann womit es anfängt und dann wo es noch irgendwo drin vorkommt. Meine Fresse. :-(
 
Interessante Methode. Kannte ich auch noch nicht. Aber bei einem Schnellen Test sehe ich, dass die Sortierung innerhalb der 2 Gruppen zufällig ist.
Aus dem Beispieldatensatz war nicht ersichtlich, dass die Zeilen innerhalb einer Gruppe auch noch bestimmt sortiert werden sollen.

So...ich hab es jetzt mit 3 Abfragen lösen können. Das geht aber kann man das zusammenfassen? Oder ist das nich gut wegen der Lesbarkeit? Mir mangelt es da ein wenig an praktischer Erfahrung in SQL.
SQL:
SELECT * FROM `besitz`
WHERE `name` LIKE '%haus%'
ORDER BY `name` LIKE 'haus %' DESC, `name` LIKE 'haus%' DESC, `name`

Grüße,
Matthias
 
Ja, das isses. Es läuft 1a. :D
Und Recht haste...ich hab es anfangs falsch beschrieben, mein Fehler. Bin aber doch überrascht, wie gut lesbar die 3 Anweisungen zusammengefasst werden (können)

-verneig-
TZP
 
Zurück