 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
14.03.2005, 11:31
|
#1
|
|
TP-Senior
Registriert seit: Nov 2004
|
Muenchen und München sollen gefunden werden
Guten Morgen
Hab noch mal ein paar Fragen zu meiner Adress-DB.
1. Die Suche soll nach Ort, PLZ oder Vorwahl stattfinden
Hab jetzt 3 Indizes erstellt (s.o) um nicht die ganze DB sequentiell durchsuchen zu müssen.
Der Indexanteil in kB ist jetzt ca. 1/3 des gesamten Speicherbedarfs.
Frage: Is das normaal oder wie macht man's besser?
(Das Ding wird nur gelesen, es werden keine Inserts gemacht)
Mein SQL war:
HTML-Code:
CREATE TABLE `test_index` (
`plz` VARCHAR( 5 ) NOT NULL ,
`ort` VARCHAR( 60 ) NOT NULL ,
`vorwahl` VARCHAR( 7 ) NOT NULL ,
`telefon` VARCHAR( 20 ) NOT NULL ,
`name` VARCHAR( 100 ) NOT NULL ,
`id` INT( 7 ) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id` ) ,
INDEX ( `plz` , `ort` , `natVorwahl` ),
KEY index_plz (plz(3)),
KEY index_ort (ort(3)),
KEY index_vorwahl (vorwahl(3))
)
2. Problem:
Möchte in meiner DB gerne sowohl "Muenchen" als "München" finden, der Eintrag selber lautet München mit ü. Wie kann man sowas machen?
Zwei Suchstrings aus der Eingabe machen? Hmmm. Keine Ahnung.
Sonnige Grüße (endlich mal wieder)
Jackie
|
|
|
14.03.2005, 12:05
|
#2
|
|
TP-Veteran
Registriert seit: Mar 2005
Ort: Oyten
|
Ich würde jeden Eintrag vor dem Abspeichern überprüfen, eventuell umwandeln und generell nur eine Variante in der DB speichern.
Egal ob der User "Muenchen" oder "München" eingibt - intern immer "München" abspeichern.
Beim Auslesen kann man dann die gleiche Logik anwenden.
Also den eingegebenen Suchbegriff genauso umwandeln und dann muss man nur eine Suchroutine machen.
|
|
|
14.03.2005, 12:39
|
#4
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
... ansonsten hilft die Suche mit where stadt like 'M_%nchen%'
|
|
|
14.03.2005, 12:39
|
#5
|
|
TP-Senior
Registriert seit: Nov 2004
|
Hi!
Danke schon mal für deine Antwort.
Eingetragen wird nichts in diese DB, das macht also kein Problem.
Nur das Suchen...
ich kann ja leider nicht generell aus "ue" "ü" mache, weil es ja auch Orte gibt die mit ue korrekt sind, die dann nicht geunden werden...
Steh glaub ich grad auf der Leitung...
edit: uups wurde grade beim Tippen abgelenkt, erst mal lesen was oben steht
|
|
|
14.03.2005, 12:46
|
#6
|
|
TP-Senior
Registriert seit: Nov 2004
|
hmm soundex klingt unheimlich, glaub das heb ich mir mal für später auf
[deckt das auch fälle wie Minga(???sorry, bin nordisch) oder Hammborch ab  ]
Ich kapier leider noch nicht was ich mit dem vom User eingegebenen Suchstring machen muss... 
|
|
|
14.03.2005, 13:00
|
#7
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Also soundex sucht nach ähnlichen Strings. Das funktioniert eigentlich nur gut bei englischen Begriffen.
Du kannst in dem vom User eingegebenen Suchbegriff folgende Ersetzung machen
ü => _%
ue => _%
also z.B.
$stadt=strtr($stadt, array('ü' => '_%', 'ue' => '_%'));
$stadt.='%';
Select .... where stadt like '$stadt';
|
|
|
14.03.2005, 13:23
|
#8
|
|
TP-Veteran
Registriert seit: Mar 2005
Ort: Oyten
|
Oder Du machst eine Extraspalte, wo Du die Begriffe umgewandelt speicherst und in der Du suchst. Die Ausgabe der Stadt wird aber über die erste Spalte gemacht.
Dann hast Du intern nach eigenen Kriterien umgewandelt, nach außen hin erscheint der Stadtname aber immer richtig geschrieben. 
|
|
|
14.03.2005, 13:36
|
#9
|
|
TP-Senior
Registriert seit: Nov 2004
|
@St@eff.en
ist leider auch nicht wirlich praktikabel
Angenommen der User sucht München, ist aber zu faul zum Tippen und schreibt nur "mün", dann kriegt ja auch das ganze Zeug, das mit "mön" und "män" anfängt...
@DSB
extraspalte ist bei 100.000 Datensätzen leider nicht drin
ich müsste glaub ich 2 Abfragen machen, das Suchwort duplizieren ue gegen ü austauschen und umgekehrt und dann beide Strings losschicken
oder geht das irgendwie so :
HTML-Code:
WHERE $suchwort1 OR $suchwort2 LIKE $stadt
?
Gruß Jackie
|
|
|
14.03.2005, 13:40
|
#10
|
|
TP-Veteran
Registriert seit: Mar 2005
Ort: Oyten
|
Zitat:
|
Zitat von jackie_o
@DSB
extraspalte ist bei 100.000 Datensätzen leider nicht drin
|
Wieso denn das nicht?
Das ist für MySQL ne Lachtablette.
Und es ist wesentlich performanter, als die Variante hier:
HTML-Code:
ich müsste glaub ich 2 Abfragen machen, das Suchwort duplizieren ue gegen ü austauschen und umgekehrt und dann beide Strings losschicken
Geändert von DSB (14.03.2005 um 13:43 Uhr).
|
|
|
14.03.2005, 13:44
|
#11
|
|
TP-Senior
Registriert seit: Nov 2004
|
ah! Geht das automatisch?
Ich dachte ich geh da zu fuß durch und mach überall wo ich ein ü finde ind ie Spalte "umlautoderso" einen eintrag.
Sorry, bin noch nicht so fit mit dem kram.
|
|
|
14.03.2005, 13:49
|
#12
|
|
TP-Veteran
Registriert seit: Mar 2005
Ort: Oyten
|
Nee, doch nicht zu Fuß.
Dafür hast Du doch nen Compi der Dir solche Arbeiten abnimmt.
Da schreibst Du Dir natürlich eine kleine Routine, die die Daten aus der ersten Spalte ausliest, gegebenenfalls umwandelt und dann in die Suchspalte einträgt.
Das MySQL-Suchstatement beziehst Du dann später nur auf die Suchspalte.
Auf dem Bildschirm gibst Du dann aber die erste Spalte mit dem richtig geschriebenen Namen aus.
|
|
|
14.03.2005, 13:52
|
#13
|
|
TP-Senior
Registriert seit: Nov 2004
|
ok probier ich mal
Hat vielleicht noch jemand ne Anmerkunf zu meiner ersten Frage, das mit dem Index?
Gruß Jackie
|
|
|
14.03.2005, 14:01
|
#14
|
|
TP-Veteran
Registriert seit: Mar 2005
Ort: Oyten
|
Du musst selbst entscheiden ob Du die Indexe wirklich benötigst.
Es macht sicherlich keinen Sinn auf alle Felder einen Index zu legen.
Ich würde erstmal die Funktionalitäten programmieren und dann mit Hilfe einer zweiten Datenbank testen ob sich die Indexe wirklich lohnen. Es hängt davon ab wieviele Besucher die Seite hat und wie schnell der MySQL-Server ist.
Aus dem Bauch heraus würde ich aber sagen, dass man sich einen Index für die Vorwahl sparen kann.
|
|
|
14.03.2005, 14:13
|
#15
|
|
TP-Senior
Registriert seit: Nov 2004
|
meine idee war jetzt, erst die DB-struktur mit den Indexen festzulegen und dann die Daten reinzuschmeissen.
Kann man den Index auch später genausogut erstellen?
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr.
|
 |