Hallo
also, es handelt sich um eine Shopsystem-DB (oscommerce) mit zusätzlichen Tabellen für eine Tonträger-Datenbank.
Aktuell ist das von einem anderen gemacht live unter http://xxlmusicworld.de zu bestaunen (soll heißen, wenn der Server mal nicht offline ist). Dort erfolgt die Suche beispielsweise per
SELECT * FROM Interpreten WHERE Name LIKE '%mehrere Begriffe%'
In der Interpreten-Tabellen stehen die Interpretennamen bei Einzelinterpreten in der Form
NACHNAME, Vorname
z.B.
MOSER, Hans
BLACK, Roy
und das gibt normal ja keiner in die Suchmaske ein.
Bei Gruppen wie 'The Who' hat der Erfasser der Daten unglücklicherweise das The weggelassen. Hier steht nur 'WHO' im Datenfeld.
z.B.
ROLLING STONES
EINSTÜRZENDE NEUBAUTEN
Das zzt. verwendete LIKE-Statement
SELECT Name, Interpret FROM xxlinterpret WHERE Name LIKE '%toni%'
findet:
ANTONIA
ANTONIA feat. SANDRA
ARNOLD, Toni
BAIRISCH DIATONISCHER JODELWAHNSINN
BANDERAS, Antonio / DE ALMEIDA, Joaquim
BANDERAS, Antonio / JOLIE, Angelina / JANE, Thomas
BANDERAS, Antonio / ROMIJN-STAMOS, Rebecca
BENDA, Jiri Antonin / PRAGUE CHAMBER ORCHESTRA / BENDA, Christian
BIRET, Idil / POLISH NATIONAL RADIO SYMPHONY ORCHESTRA / WIT, Antoni
BRAXTON, Toni
BRAXTON, Toni & KENNY G
CHACON, Don Antonio / MONTOYA, Ramon
CHILDS, Toni
COLLETTE, Toni/GRIFFITHS, Rachel/HUNTER, Bill
COTTURA, Toni
CRUISE, Tom/PITT, Brad/BANDERAS, Antonio/SLATER, Christian
CRYPTONITE
DJ ARNIE feat. 4 STONIS
DR. TONIC TEAM
GARCIA, Toni feat. LIL SUZY
GILBERT, Melissa/PENNY, Joe/FRANCIOSA, Toni
GLAHE, Will & KARNEVALSORCHESTER / THELEN, Kurt-Adolf / GERHARDS, Toni
GRANT, Hugh / COLLETTE, Toni / WEISZ, Rachel
GRAPPATONI
HALLIDAY, Toni
HARRIS, Ed / MASTRANTONIO, Mary Elizabeth / BIEHN, Michael
HORTA, Toninho
KLIEGEL, Maria / POLISH NATIONAL RADIO SYMPHONY ORCHESTRA - WIT, Antoni
LINDT, Toni
LOS LOBOS & BANDERAS, Antonio
MAIER, Toni & BAND
MALDEN, Karl/VAN DOHLEN, Lenny/KALEM, Toni/VAN PATTEN, Joyce
MOLINA, Antonio
MONTGOMERY, Lee/HUDSON, Toni
PUTRINO, Toni
SALMONELLI, Toni
SINATRA, Frank & JOBIM, Antonio Carlos
SPEARMAN, Toni
THAYER, Max/DRESDEN, John/NERO, Toni/MONTE, Mike
TONIC
TONICS
TONINO
TONIO K.
TONY TONI TONE
WILLIS, Bruce/OSMENT, Haley Joel/COLETTE, Toni
YOUNG TEUTONIC STREET BAND
Ein Auszug für die Suche nach 'Toni' mit
SELECT Name, Interpret FROM xxlinterpret WHERE Name REGEXP "(^| )toni($| )"
ergibt z.B.:
ARNOLD, Toni
BRAXTON, Toni
BRAXTON, Toni & KENNY G
CHILDS, Toni
COTTURA, Toni
GARCIA, Toni feat. LIL SUZY
GILBERT, Melissa/PENNY, Joe/FRANCIOSA, Toni
GLAHE, Will & KARNEVALSORCHESTER / THELEN, Kurt-Adolf / GERHARDS, Toni
GRANT, Hugh / COLLETTE, Toni / WEISZ, Rachel
HALLIDAY, Toni
LINDT, Toni
MAIER, Toni & BAND
MONTGOMERY, Lee/HUDSON, Toni
PUTRINO, Toni
SALMONELLI, Toni
SPEARMAN, Toni
TONY TONI TONE
WILLIS, Bruce/OSMENT, Haley Joel/COLETTE, Toni
während
SELECT Name, Interpret FROM xxlinterpret WHERE Name LIKE 'toni'
gar nichts findet, findet
SELECT Name, Interpret FROM xxlinterpret WHERE Name LIKE '% toni %'
nur noch:
BRAXTON, Toni & KENNY G
GARCIA, Toni feat. LIL SUZY
GRANT, Hugh / COLLETTE, Toni / WEISZ, Rachel
MAIER, Toni & BAND
TONY TONI TONE
weil bei allen anderen 'toni' am Anfang oder Ende des Feldes steht.
Daran kann man vielleicht schon ein bischen erahnen wie die Daten in der Tabelle aussehen und wo die Schwierigkeiten liegen.
Ich bin zzt. an der technischen Überarbeitung unter:
http://xxlmusicworld.onsign.de
Für Besucher die 'the who' suchen findet die Maschine nichts, weil nur 'WHO' drin steht. Die ODER-Suche nach REGEXP "(^| )the($| )|(^| )who($| )" findet natürlich Unmengen weil zzt. nach das Stopwort 'the' mitgesucht wird. Ebenfalls ist mir bekannt, dass andere Sonderzeichen in der Eingabe ebenfalls gegen Leerzeichen ausgetauscht und mehrere zusammengefaßt werden müssen.
Aber wie gesagt für die ODER-Suche habe ich mich schon festgelegt auf die dargestellte REGEXP-Suche.
Meine Frage war, wie ich eine AND-Suche mit
regulären Ausdrücken erreichen kann
Die Eingabe von 'hans moser' soll
Hans, MOSER
MOSER, Hans
MOSER, Hans & HÖRBIGER, Paul
finden. Nicht aber:
ALBERS, Hans
DURAND, Angela & CARSTE ORCHESTER, Hans
RÜHMANN, Heinz / BRAUSEWETTER, Hans / SIEBER, Josef
MOSER, Peter
MOSER, Hansl
MOSERMANN, Hans
Die Eingabe von 'master grand five' soll
GRAND MASTER FLASH FIVE
FIVE GRAND MASTER
finden. Nicht aber:
GRAND MASTER FLASH
GRAND FUNK RAILROAD
HOUSE MASTER BOYZ & RUDE BOY OF HOUSE
GRAND MASTERS FIVE
GRANDMASTER FLASH & FURIOUS FIVE
GRANDMASTER FLASH & FURIOUS FIVE feat. MEL, Melle
und wer 'five master grand flash' eingibt soll nur noch
GRAND MASTER FLASH FIVE
finden.
Ich suche also weiterhin nach einem Regulären Ausdruck, der mir im untersten Beispiel die REGEXP-Suche nach den Ausdrücken '(^| )five($| )', '(^| )master($| )', '(^| )grand($| )' und '(^| )flash($| )' in beliebiger Reihenfolge ermöglicht.
Also Quasi ein Muster nach dem ich beliebig viele Wörter in beliebiger Reihenfolge beschreiben kann, die aber alle enthalten sein müssen (AND-Funktion).
So ich hoffe, das war jetzt Beispiel genug für meine Anfrage.
Mit bestem Dank
Hartmut