PHP MySQL Select mit Like und Variablen
McDeath98 24.03.2016 - 02:08 3814 20
Crash Override
BOfH
|
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.
Bearbeitet von Crash Override am 24.03.2016, 14:52
|
McDeath98
Dark Rider
|
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.
|
Obermotz
Fünfzylindernazi
|
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..
Bearbeitet von Obermotz am 24.03.2016, 16:34
|
McDeath98
Dark Rider
|
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. Das ist ohne einen Aufwand, welcher den Rahmen des Projektes sprengen würde absolut unmöglich. Im Moment sind es glaube ich 70 Marken. Wenn nur jede Marke total 50 Modelle hat, was z.B. bei Mercedes gerade mal 4 Typen ausmacht, dann kannst du dir vorstellen über was wir für einen Aufwand reden. Davon abgesehen, geht es bei dem Projekt darum passende Ersatzteile vom Autoverwerter zu finden, wo z.B. beim BMW 70% der Teile der ganzen 52xer Reihe passen. Und da leider innerhalb der Software beim Fabrikat Marke und Model stehen und wir von ca. 120k Datensätzen reden fällt auch diese Option flach. Es ist aber im Zuge einer Softwareumstellung geplant das in Zukunft zu trennen. Letzten Endes reden wir von vielleicht 50-100 Anfragen pro Tag. Darum mach ich mir in erster Linie keine wirklichen Sorgen um die Performance. Wenn 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. Greetings
|
Obermotz
Fünfzylindernazi
|
Wenn 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. Deshalb gleich gscheit machen, soweits geht. Glaub mir, das faellt dir nachher auf den Kopf, die meisten von uns reden aus Erfahrung
|
McDeath98
Dark Rider
|
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.
|