mysql query vereinfachen

Roberto

Angesehenes Mitglied
Hallo ich habe folgenden code:

CODE
$sql = "SELECT * FROM $datenbank[0] where branche like '%$searchshort%' AND ort like '%$ort%' OR nachname like '%$searchshort%' AND ort like '%$ort%' OR bez like '%$searchshort%' AND ort like '%$ort%' OR keyword like '%$searchshort%' AND ort like '%$ort%' OR zusatz like '%$searchshort%' AND ort like '%$ort%' limit 0, 2;";



kann ich den vereinfachen? eventuell mit xor ??
 
QUOTE (Big Rob @ Mo 3.11.2008, 15:31)Hallo ich habe folgenden code:


CODE
$sql = "SELECT * FROM $datenbank[0] where branche like '%$searchshort%' AND ort like '%$ort%' OR nachname like '%$searchshort%' AND ort like '%$ort%' OR bez like '%$searchshort%' AND ort like '%$ort%' OR keyword like '%$searchshort%' AND ort like '%$ort%' OR zusatz like '%$searchshort%' AND ort like '%$ort%' limit 0, 2;";



kann ich den vereinfachen? eventuell mit xor ??

Moin,

ich würd's mal so versuchen:

SELECT * FROM $datenbank[0]
where ort like '%$ort%' AND
(branche like '%$searchshort%'
OR nachname like '%$searchshort%'
OR bez like '%$searchshort%'
OR keyword like '%$searchshort%'
OR zusatz like '%$searchshort%')
limit 0, 2


HTH,
Alex
 
Die Umschreibeaktion dürfte normalerweise nur reine Kosmetik sein.

Denn dieser Code

QUOTE (alexruett @ Mo 3.11.2008, 15:39)ich würd's mal so versuchen:

SELECT * FROM $datenbank[0]
where ort like '%$ort%' AND
(branche like '%$searchshort%'
OR nachname like '%$searchshort%'
OR bez like '%$searchshort%'
OR keyword like '%$searchshort%'
OR zusatz like '%$searchshort%')
limit 0, 2


wird im Regelfall vom Optimierer in diese Form


QUOTE (Big Rob @ Mo 3.11.2008, 15:31)
CODE
$sql = "SELECT * FROM $datenbank[0] where branche like '%$searchshort%' AND ort like '%$ort%' OR nachname like '%$searchshort%' AND ort like '%$ort%' OR bez like '%$searchshort%' AND ort like '%$ort%' OR keyword like '%$searchshort%' AND ort like '%$ort%' OR zusatz like '%$searchshort%' AND ort like '%$ort%' limit 0, 2;";




aufgelöst. Die erste Variante ist also lediglich etwas leichter lesbar.

Allerdings ist mir nicht so ganz klar, ob der Code so wirklich sinnvoll ist. Denn '%$ort%' heißt, daß (1) die Suche nach 'lin' auch Berlin findet, (2) daß in der Regel nie ein Index genutzt werden kann, so daß immer ein Fullscan notwendig ist.

Macht das bei Ortschaften wirklich Sinn, nach '%ort%' zu vergleichen?
 
Muss mich Jürgen anschliessen. Mysql kann das so nicht handeln, wenn wir wirklich viele Daten und/oder viele Abfragen haben. Aber für eine Seite mit wenig Last ein sehr einfach zu implementierende und funktionierende Lösung. Wenn man aber wie Jürgen sagt den Ort über ist-gleich abfragt, ist man schon viel besser dabei.

Die Vereinfachung ist aber sinnvoll, sie erhöht die Lesbarkeit für den Entwickler.
 
QUOTE (jAuer @ Mo 3.11.2008, 17:37)Die Umschreibeaktion dürfte normalerweise nur reine Kosmetik sein.

Denn dieser Code


QUOTE (alexruett @ Mo 3.11.2008, 15:39)ich würd's mal so versuchen:

SELECT * FROM $datenbank[0]
where ort like '%$ort%' AND
(branche like '%$searchshort%'
OR nachname like '%$searchshort%'
OR bez like '%$searchshort%'
OR keyword like '%$searchshort%'
OR zusatz like '%$searchshort%')
limit 0, 2


wird im Regelfall vom Optimierer in diese Form


QUOTE (Big Rob @ Mo 3.11.2008, 15:31)
CODE
$sql = "SELECT * FROM $datenbank[0] where branche like '%$searchshort%' AND ort like '%$ort%' OR nachname like '%$searchshort%' AND ort like '%$ort%' OR bez like '%$searchshort%' AND ort like '%$ort%' OR keyword like '%$searchshort%' AND ort like '%$ort%' OR zusatz like '%$searchshort%' AND ort like '%$ort%' limit 0, 2;";




aufgelöst.

Warum macht der Optimierer denn sowas? Unabhängig von der Lesbarkeit für den User hätte ich gedacht, dass die erste Variante auch für die Datenbank die günstigere ist?
 
Zurück
Oben