PHP/MYSQL Suche mit Umlauten
BiG_WEaSeL 07.01.2007 - 11:24 974 6
BiG_WEaSeL
Super Moderator-
|
Folgende Ausgangssituation: Ich habe eine Suche (selbst geschrieben) für eine Newsseite die die MYSQL-Datenbank durchsucht. SELECT * FROM news WHERE titel LIKE "%$sucharray[$i]%" or unter LIKE "%$sucharray[$i]%" or artikel LIKE "%$sucharray[$i]%" ORDER BY datum DESC limit $offset,$anzahl;
Danach führe ich eine query aus um zu sehen wieviele Treffer es insgesamt waren: SELECT COUNT(id) AS treffer FROM news WHERE" . titel LIKE "$sucharray[$i]" or unter LIKE "$sucharray[$i]" or artikel LIKE "%$sucharray[$i]%" . " AND datum<='$testdatum' AND frei=\"J\";
Mein Problem: Bei der oben stehenden Suchquery wird bei der Suche nach ÖBB auch OBB und OEBB gefunden + zusätzlich case-insensitve, ich möchte allerdings nur Jene Datensätze die wirklich ÖBB enthalten (case-insensitve, also auch öBB Öbb etc.) Lösungsversuche: 1. ich hab die query mit "like binary" erweitert, was bewirkt, dass nur noch ÖBB (case-sensitive) gefunden wird. 2. ich verwende die oben genannte Query und filtere per PHP die falschen Treffer heraus, dabei habe ich allerdings das Problem, dass ich es nicht zusammenbringe das "nächste/vorherige Seite" Feature zu implementieren weil ich nach dem herausfiltern nicht mehr mehr als (z.b. 20) Results habe (ÖBB liefert 29 echte Treffer) und so das Feature glaubt es gibt nicht mehr Treffer. 3. ich habe schon unzählige Scripts auf z.b. hotscripts.com, drupal etc durchforstet bin aber nicht schlauer geworden Kann mir jemand von euch eventuell dabei helfen? Wäre sehr nett.
|
Burschi1620
24/7 Santa Claus
|
du könntest die suchergebnisse in php separat nochmal nach ÖBB durchsuchen (um das OBB und OEBB problem zu umgehen)
|
fatmike182
Agnotologe
|
|
BiG_WEaSeL
Super Moderator-
|
vielen dank fatmike, ich brauchte wohl einen externen anschub, mit LOWER() hab ich's schon probiert das hat damals nicht funktioniert, mit UPPER funktioniert es jetzt. @burschi: bitte vorher den ganzen post lesen und nicht nur die überschrift (siehe lösungsversuch 2)
|
Burschi1620
24/7 Santa Claus
|
habs eig. gelesen aber anscheinend missinterpretiert Aber das problem kannst du ja auch noch lösen. Je nachdem wie des ganze halt aussieht (wwi ) kannst du dir ja irgendwelche hilfsvariablen oder die treffer selbst auf die nächste seite rüberschicken (ich rede vom <form> in html) und da dann auslesen und anhängen oder so. Weiß net ob des so gehen könnte, so hätte ich es halt gemacht. Hab halt noch keine großen erfahrungen mit php sammeln können edit: eh schon solved, diesmal überlesen *g*. Nadann is ja egal
Bearbeitet von Burschi1620 am 07.01.2007, 12:33
|
fatmike182
Agnotologe
|
bitteschön *µ* war eigentlich Zufall, dass ich Upper geschrieben hab & nicht Lower... Wundert mich, dass das eine funktioniert & das andere nicht!
D.h. suche funzt jetzt ganz? (hab sowas bei suchfunktionen NIE berücksichtigt, aber jetzt wo ichs weiß...)
|
BiG_WEaSeL
Super Moderator-
|
bitteschön *µ* war eigentlich Zufall, dass ich Upper geschrieben hab & nicht Lower... Wundert mich, dass das eine funktioniert & das andere nicht! hab es heute nicht mehr ausprobiert, vielleicht hab ich damals auch etwas anderes falsch gemacht D.h. suche funzt jetzt ganz? (hab sowas bei suchfunktionen NIE berücksichtigt, aber jetzt wo ichs weiß...)
ja, und zwar so: mysql_query("SELECT * FROM news WHERE UPPER(titel) like \"%" . strtoupper($sucharray[$i]) . "%\" or UPPER(unter) LIKE \"%" . strtoupper($sucharray[$i]) . "%\" or UPPER(artikel) LIKE \"%" . strtoupper($sucharray[$i]) . "%\" ORDER BY datum DESC limit $offset,$anzahl;");
als verbesserung könnte man auch $sucharray[$i] nur 1 mal vorher umwandeln und in eine temporäre variable schreiben, die man dann in der query benützt.
|