2011-01-15 14 views
0

Ich habe eine db mit zwei Spalten: Vorname und Nachname. Der Vorname kann mehrere Wörter enthalten. Der Nachname kann mit Bindestrichen versehene Wörter enthalten.Suche 2 Spalten mit 1 Eingabefeld

Gibt es eine Möglichkeit, beide Spalten mit nur einem Eingabefeld zu durchsuchen?

Datenbank

ID  `First Name`  `Last Name` 
1   John Peter   Doe 
2   John    Fubar 
3   Michael   Doe 

Suche

John Peter zurückgibt id 1
john kehrt id 1,2
doe kehrt id 1,3
john doe kehrt id 1
Peter John gibt id 1
Peter doe kehrt id 1
doe john kehrt id 1

ich zuvor versucht, die folgenden. Die Suche nach John Doe:

SELECT * FROM names WHERE (
    `first` LIKE '%john%' OR 
    `first` LIKE '%doe%' OR 
    `last` LIKE '%john%' OR 
    `last` LIKE '%doe%' 

)

, die beide 1 und 3 gibt

Antwort

1

Eine Korrelation zwischen dem Vor- und Nachnamen erforderlich.

Für zwei Wörter (w1, w2), die Bedingung

(first LIKE "%w1%" AND last LIKE "%w2%") OR (first LIKE "%w2%" AND last LIKE "%w1%") 

Bedeutung, w1 in Vorname und w2 in Nachname sein muss,
OR w2 in erster sein müssen Name UND w1 in Nachname.

Auf diese Weise wird John Doe ID 1 ausgewählt haben.

0

Ich weiß nicht, was Sie genau sind gefragt, aber nicht Sie dies bedeuten, gerade?

WHERE (`first name` LIKE '%searchString%' OR `last name` LIKE '%searchString%') 

Wie Sie einen Kommentar sagt, wenn eines der Wörter in jeder Spalte sein kann (und sollte sie mindestens einmal vorhanden sein? Oder sollte es am besten fit sein? Ist eine andere Reihenfolge etwas bedeuten), dann werden Sie muss etwas mehr tun, aber Sie müssen wirklich an einige Spezifikationen dann zuerst denken :)

+0

Nein, wenn ich John Peter Doe mit John Peter als Vorname und Doe als Nachname habe, wird die Suche nach 'John Doe' nichts zurückgeben. – Norbert

+0

Ja, wenn du willst, dass du in der Lage bist, solltest du deine Frage ein wenig klären, findest du nicht? was kann gesucht werden, was ist in den Spalten, etc etc. – Nanne

+0

Ich habe den Beitrag aktualisiert, um einige Beispiele zu enthalten. Ich hoffe, das hilft. – Norbert

1

Sie können Benutzername "Wörter" durch Raum teilen und das letzte Einzelteil des Feldes erhalten, das sein Nachname sein sollte. Dann sollten Sie SQL wie "Nanne" abfragen oder Sie können die Tagsuche verwenden.

Viel Glück.

0

Eine kurze Lösung wäre, den letzten Whitespace der Eingabe von preg_match oder etwas in diesem Sinne zu finden (kann sich wirklich nicht an die richtige Funktion erinnern), dann benutze das als Marker. Speichere alles nach dem Marker im Nachnamen "searchstring" und alles davor im Vornamen "searchstring".

Ein offensichtlicher Fehler in dieser Lösung wäre jedoch, wenn die Person 2 Wörter für einen Nachnamen hätte. Aber ich bin mir nicht sicher, ob Sie 2 Wort Nachnamen annehmen oder nicht. Also, lassen Sie mich Nanne hier zitieren:

sollten Sie Ihre Frage ein Bit klären, nicht wahr?was gesucht werden kann, was in den Spalten, etc etc