URL: https://www.overclockers.at/coding-stuff/php-mysql-select-mit-like-und-variablen_245824/page_2 - zur Vollversion wechseln!
Das größte Problem das ich darin sehe, ist das die Daten nicht ordentlich normalisiert sind. Der Like wird dir auf Dauer die Performance versauen. Wenn du Hersteller und Modell in verschiedenen Spalten hast, kannst du problemlos mit "WHERE hersteller = '$hersteller' AND model LIKE '%".$Modell."%' nur noch die Volltextsuche auf einen geringen Teil der Daten machen, anstatt einen Full Table Scan. Wenn du für das Modell dann noch ein Dropdown Menü anstatt der freien Eingabe einbaust, kannst du auch noch auf diesen Like verzichten und die Query wird um den Faktor 1000 schneller.
Damit hast du recht. Die Variable category gebe ich aber fix über ne Auswahlliste vor, welche genau den Daten in der Datenbank entspricht. darum =
Beim Fabrikat ist das Problem, dass in der Datenbank z.B. BMW 525i steht.
Darum LIKE und Platzhalter.
Das Problem war wirklich nur das er als das genommen hat, und nicht als leerzeichen. Mit Leerzeichen in der Definition funktioniert es perfekt.
Die Loesung dafuer ist, dass du die Daten fuer die Auswahlliste aus der Datenbank holst inkl. Primary Key und dann ueber den Primary Key auch deine Selektion triffst.
D.h. deine Tabellen sehen so aus:
Hersteller
ID|Bezeichnung
Modell
ID|Hersteller_ID|Bezeichnung
dann hast du
select h.bezeichnung, m.bezeichnung
from hersteller h
left outer join modell m on m.hersteller_id = h.id
where m.id = 3
Wobei 5 halt dann die id von BMW ist und 3 die id vom 525..
Zitat von Crash OverrideDas größte Problem das ich darin sehe, ist das die Daten nicht ordentlich normalisiert sind. Der Like wird dir auf Dauer die Performance versauen. Wenn du Hersteller und Modell in verschiedenen Spalten hast, kannst du problemlos mit "WHERE hersteller = '$hersteller' AND model LIKE '%".$Modell."%' nur noch die Volltextsuche auf einen geringen Teil der Daten machen, anstatt einen Full Table Scan. Wenn du für das Modell dann noch ein Dropdown Menü anstatt der freien Eingabe einbaust, kannst du auch noch auf diesen Like verzichten und die Query wird um den Faktor 1000 schneller.
Deshalb gleich gscheit machen, soweits geht.Zitat von McDeath98Wenn das Ganze aber in einen produktiv Status übergehen sollte, dann müssen sicher noch viele Sachen angepasst werden. Aber da muss ich erst an anderer Stelle ansetzen.
Ich hab mir persönlich für das Ganze ein Limit von 20 Stunden gesetzt. Der technische Part steht.
Und das ganze ist Momentan eher eine Machbarkeitsgeschichte.
Sollte es wirklich Produktiv werden, so sind die Änderungen an den Scripts nicht wirklich aufwenig.
Die im Backoffice hingegen schon. Da müssen wir einen Grossteil aller Daten ändern. Da fällt die Stunde oder auch 2 fürs anpassen nicht wirklich ins Gewicht.
Aber natürlich habt Ihr recht.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025