2016-05-03 7 views
0

Ich habe eine Tabelle mit 3 Spalten etwas wie unten,Suche Komma Zeichenfolge mit LIKE in mysql getrennt

Expertentisch

id  - 1589 
name  - Jhonny 
expert_in - 1,12,8 (Values similar like this) 

Die experts_in eine andere Tabelle enthält Fremdschlüssel

experts_in Tabelle

id  - 1 
expert_in - painting 

will ich suchen Experten, die in einigen Jobs Experte sind, während für Experten suchen

SELECT * FROM `experts` WHERE expert_in LIKE 1% 

Die obige Abfrage bringt alle Experten mit 11,12,13 ... etc. Ich will nur genaues Wort. Ich weiß, LIKE wird alles bringen. Gibt es einen Weg, dies zu erreichen, ohne die Tabelle zu ändern?
Vielen Dank im Voraus.

+0

Wenn Sie bestimmte Werte wünschen, normalisieren Sie Ihre Daten. Komma-getrennte Wertelisten sorgen für ineffiziente Suchvorgänge und Kludgy-Workrounds. Oder verwenden Sie FIND_IN_SET(), aber es ist bei weitem nicht so effizient wie eine gut normalisierte Datenbank –

+0

Was Sie tun, ist eine schlechte Praxis. Wenn die Beziehung manyToMany von der Expert-Tabelle zur Tabelle expert_in besteht. Sie müssen dritte Tabelle, die Fremdschlüssel aus beiden Tabellen enthalten. –

+0

Ich habe verstanden, das ist eine schlechte Praxis. Aber mein Schicksal sollte ich der Arbeit meines Seniors folgen! –

Antwort

2

verwenden Sie sollten REGEXP verwenden.
Diese Abfrage:

SELECT * FROM experts 
    WHERE expert_in REGEXP '[[:<:]]1[[:>:]]'; 

Output: Siehe Live-Demo auf SQLFiddle

Hinweis: Sie anpassen können Zeichenfolge basierend auf Ihrer Anforderung über REGEXP Suche genau das Wort sucht.

+0

Danke für die Antwort! –

1

Wenn Sie die Daten ändern können (nicht die Tabelle/das Schema), sollten Sie ein weiteres Komma anhängen und voranstellen, damit Sie mit where col like "%,123,%" suchen können, das passt immer auf einen genauen Wert. Andernfalls müssen Sie Regex mit etwas wie ,?123,?

+0

Können Sie bitte in meinem Fall reg ex arbeiten? –

+1

Danke @piyush Gupta Antwort funktionierte für mich. –

Verwandte Themen