Hallo,
ich sitze an einem Projekt und finde keine Lösung für ein Problem. Es handelt sich um eine Art Produktverzeichnis, in dem nach Produktnamen, Inhalten in der Beschreibung und der Artikelnummer gesucht werden kann. Die Suche soll jedoch in allen Feldern automatisch stattfinden, ohne dass der Benutzer explizit angeben muss, ob er nun eine Artikelnummer oder ein Produkt sucht.
Da es sich jedoch um technische Produkte handelt, können diese auch nur "3490" heißen, was eine Unterscheidung zwischen nummerischen und nicht nummerischen Suchbegriffen unmöglich macht (um sagen zu können, ob nun in der Artikelnummer oder im Text gesucht werden soll).
Das Hauptproblem liegt nun darin, dass bei der Ausgabe zuerst die Zeilen ausgegeben werden sollen, bei denen der Suchbegriff im Artikelnamen gefunden wurde, anschließend die mit Übereinstimmungen in der Artikelbeschreibung, dann die mit Treffern in zusätzlichen Artikelinformationen (z. B. Kompatibilitätslisten) und am Ende die Zeilen, bei denen der Suchbegriff innerhalb der Artikelnummer vorkommt.
Ein Beispiel:
ID: 1
name: PT-3590
text: blah blah
komp: 5555 blah blah
art_nr: 18486515
ID: 2
name: AT-239
text: blah blah
komp: Voll kompatibel zum PT-3590
art_nr: 894894845
ID: 3
name: DD-239093
text: blah blah
komp: blah blah
art_nr: 45883590845
ID: 4
name: XS-0931 V1
text: blah blah ähnlich dem PT-3590
komp: blah blah
art_nr: 4888454
Die Suche soll nun zuerst der Artikel mit der ID 1 ausgeben, da der Suchbegriff im Artikelnamen gefunden wurde. Anschließden die ID 4, da Suchbegriff im Text gefunden. Dann ID 2, da hier der Suchstring in der Kompatibilitätsliste gefunden wurde und am Ende die ID 3, da hier der Begriff in der Artikelnummer auftaucht.
Die einzige Lösung, die mir zu diesem Problem einfällt, wären 4 Abfragen. Die erste sucht im Artikelnamen, die zweite im Text usw.
Da es aber eigentlich 17 Felder sind, in denen gesucht werden soll und die Tabelle mehrere Tausend Datensätze beinhaltet und sehr stark frequentiert ist, wären 17 Abfragen nicht gerade schön für die Performance.
Desweiteren wäre das Hinzufügen von 16 weiteren Querys sehr aufwändig, da ich der 6. Entwickler an diesem Projekt bin und jeder meiner Vorgänger sein eigenes Süppchen gekocht hat und zwangsläufig 30 % der gesamten PHP-Struktur umgestalten müsste.
Weiß jemand, wie ich diese Sortierung lösen kann? Dass praktisch nach einer fest vorgegebenen Reihenfolge der Spalten gesucht wird? (Eine weitere Sortierung nach Alphabet oder so ist nicht nötig.)
Vielen Dank schonmal fürs Lesen und evtl. Kopfzerbrechen
DasD
ich sitze an einem Projekt und finde keine Lösung für ein Problem. Es handelt sich um eine Art Produktverzeichnis, in dem nach Produktnamen, Inhalten in der Beschreibung und der Artikelnummer gesucht werden kann. Die Suche soll jedoch in allen Feldern automatisch stattfinden, ohne dass der Benutzer explizit angeben muss, ob er nun eine Artikelnummer oder ein Produkt sucht.
Da es sich jedoch um technische Produkte handelt, können diese auch nur "3490" heißen, was eine Unterscheidung zwischen nummerischen und nicht nummerischen Suchbegriffen unmöglich macht (um sagen zu können, ob nun in der Artikelnummer oder im Text gesucht werden soll).
Das Hauptproblem liegt nun darin, dass bei der Ausgabe zuerst die Zeilen ausgegeben werden sollen, bei denen der Suchbegriff im Artikelnamen gefunden wurde, anschließend die mit Übereinstimmungen in der Artikelbeschreibung, dann die mit Treffern in zusätzlichen Artikelinformationen (z. B. Kompatibilitätslisten) und am Ende die Zeilen, bei denen der Suchbegriff innerhalb der Artikelnummer vorkommt.
Ein Beispiel:
ID: 1
name: PT-3590
text: blah blah
komp: 5555 blah blah
art_nr: 18486515
ID: 2
name: AT-239
text: blah blah
komp: Voll kompatibel zum PT-3590
art_nr: 894894845
ID: 3
name: DD-239093
text: blah blah
komp: blah blah
art_nr: 45883590845
ID: 4
name: XS-0931 V1
text: blah blah ähnlich dem PT-3590
komp: blah blah
art_nr: 4888454
Die Suche soll nun zuerst der Artikel mit der ID 1 ausgeben, da der Suchbegriff im Artikelnamen gefunden wurde. Anschließden die ID 4, da Suchbegriff im Text gefunden. Dann ID 2, da hier der Suchstring in der Kompatibilitätsliste gefunden wurde und am Ende die ID 3, da hier der Begriff in der Artikelnummer auftaucht.
Die einzige Lösung, die mir zu diesem Problem einfällt, wären 4 Abfragen. Die erste sucht im Artikelnamen, die zweite im Text usw.
Da es aber eigentlich 17 Felder sind, in denen gesucht werden soll und die Tabelle mehrere Tausend Datensätze beinhaltet und sehr stark frequentiert ist, wären 17 Abfragen nicht gerade schön für die Performance.
Desweiteren wäre das Hinzufügen von 16 weiteren Querys sehr aufwändig, da ich der 6. Entwickler an diesem Projekt bin und jeder meiner Vorgänger sein eigenes Süppchen gekocht hat und zwangsläufig 30 % der gesamten PHP-Struktur umgestalten müsste.
Weiß jemand, wie ich diese Sortierung lösen kann? Dass praktisch nach einer fest vorgegebenen Reihenfolge der Spalten gesucht wird? (Eine weitere Sortierung nach Alphabet oder so ist nicht nötig.)
Vielen Dank schonmal fürs Lesen und evtl. Kopfzerbrechen
DasD
Kommentar