"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP MySQL Select mit Like und Variablen

McDeath98 24.03.2016 - 02:08 3814 20
Posts

Crash Override

BOfH
Registered: Jun 2005
Location: Germany
Posts: 2951
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
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
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
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
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
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
Zitat von Crash Override
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
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
Zitat von McDeath98
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 :D

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz