Sortierung nach einem Feld / Wert

DiDiJo

Erfahrenes Mitglied
Hallo Leute,

Ich nutze auf meiner Immo-Seite eine Geo-Datenbank und eine Immobilien-datenbank. Theoretisch kann ich so auch eine Umkreissuche starten kann.

Wenn ich nun nach beispielswise "Bonn" suche, findet mein Script momentan alle Orte im Unmkreis von Bonn (beispielsweise 15km) und spuckt dann die Immobilien entsprechend aus.

Schöner fänder ich es nun, wenn ich die Umkreissuche nutze und erst die Objekte aus Bonn kommen und dann die anderen. Natürlich wäre es der absolute oberhammer, wenn der Rest dann nach der entfernung aufsteigend sortiert wird, aber dass kann ich irgendwann später mal lösen.

Wichtig ist nur, dass zuerst die Objekte auftauchen die in de3m Ort sind in dem man sucht und dann erst alle anderen.

Meine SQL Konstrukt sieht im Moment so aus:
Code:
SELECT  im.*,b.*  
FROM wib24 im LEFT JOIN bilder b ON im.openimmo_id = b.openimmo_id 
WHERE 1  AND (im.openimmo_anid='65471' OR im.openimmo_anid='68865' OR im.openimmo_anid='66275' OR im.openimmo_anid='63185' OR im.openimmo_anid='20015' OR im.openimmo_anid='66272' OR im.openimmo_anid='20021' OR im.openimmo_anid='20014' OR im.openimmo_anid='31080') AND (im.ort='Bonn' OR im.ort LIKE '%Bonn%' OR im.ort LIKE '%Alfter%' OR im.ort LIKE '%Sankt Augustin%' OR im.ort LIKE '%Bornheim%' OR im.ort LIKE '%Königswinter%' OR im.ort LIKE '%Siegburg%' OR im.ort LIKE '%Niederkassel%' OR im.ort LIKE '%Troisdorf%' OR im.ort LIKE '%Wachtberg%' OR im.ort LIKE '%Meckenheim%' OR im.ort LIKE '%Swisttal%' OR im.ort LIKE '%Wesseling%' OR im.ort LIKE '%Lohmar%' OR im.ort LIKE '%Hennef%' OR im.ort LIKE '%Bad Honnef%') AND (im.auftragsart!='S' OR im.auftragsart IS NULL)  
ORDER BY `im`.`plz` ASC LIMIT 0,10

Toll wäre es wenn man das ganze (aufgrund meiner Programmierung) KOMPLETT über SQL lösen könnte
 
Nachdem ich dein SQL mal formatiert habe, stellt sich die Frage, in welchem Ort den gesucht wird, das sind zig Orte die gesucht werden. Meinst du hier Bonn?

Code:
SELECT  
	im.*,
	b.*  
FROM 
	wib24 im LEFT JOIN bilder b ON im.openimmo_id = b.openimmo_id 
WHERE 1  AND 
	(im.openimmo_anid='65471' 
		OR im.openimmo_anid='68865' 
		OR im.openimmo_anid='66275' 
		OR im.openimmo_anid='63185' 
		OR im.openimmo_anid='20015' 
		OR im.openimmo_anid='66272' 
		OR im.openimmo_anid='20021' 
		OR im.openimmo_anid='20014' 
		OR im.openimmo_anid='31080') 
	AND (im.ort='Bonn' 
		OR im.ort LIKE '%Bonn%' 
		OR im.ort LIKE '%Alfter%' 
		OR im.ort LIKE '%Sankt Augustin%' 
		OR im.ort LIKE '%Bornheim%' 
		OR im.ort LIKE '%Königswinter%' 
		OR im.ort LIKE '%Siegburg%' 
		OR im.ort LIKE '%Niederkassel%' 
		OR im.ort LIKE '%Troisdorf%' 
		OR im.ort LIKE '%Wachtberg%' 
		OR im.ort LIKE '%Meckenheim%' 
		OR im.ort LIKE '%Swisttal%' 
		OR im.ort LIKE '%Wesseling%' 
		OR im.ort LIKE '%Lohmar%' 
		OR im.ort LIKE '%Hennef%' 
		OR im.ort LIKE '%Bad Honnef%') 
	AND (im.auftragsart!='S' 
		OR im.auftragsart IS NULL)  
ORDER BY im.plz ASC LIMIT 0,10

Nachtrag:
versuch es mal so zu lösen:
Code:
ORDER BY IF(im.ort='Bonn', 'AAAA', im.ort), im.plz ASC
 
Zuletzt bearbeitet:
sry ja,

in meinem obigen Beispiel hab ich nach Bonn gesucht und die felder in den '%%' sind die Orte, die mir die Geodatenbank über die umkreissuche ruasgeholt haben

kurze Frage noch (dein beiispiel sieht ja schonmal klasse aus) ... wofür steht das 'AAAAA' iin deiner Order Anweisung und wofür das 2. "im.ort" ?
 
Ich sortiere nach dem Ort. Wenn der Ort Bonn ist, ersetze ich ihn durch AAAA, da das bekanntlich ganz vorne im Alphabet steht und somit kommt dieser Eintrag mit dem Ort Bonn vor den anderen.

Du kannst es auch mit der PLZ machen
Code:
ORDER BY IF(im.ort='Bonn', '00000', im.plz)
 
Zurück