2016-05-20 5 views
0

Ich muss einen Datensatz finden, die keinen bestimmten Wert in CSV-Spalte haben. unten ist die TabellenstrukturMYSQL CSV-Spalte überprüfen für ausschließen

CREATE TABLE `employee` (
    `id` int NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(100) NOT NULL, 
    `last_name` varchar(100) NOT NULL, 
    `keywords` text, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Sample record1: 100, Sam, Thompson, "50,51,52,53" 
Sample record2: 100, Wan, Thompson, "50,52,53" 
Sample record3: 100, Kan, Thompson, "53,52,50" 

50 = sports 
51 = cricket 
52 = soccer 
53 = baseball 

ich die Mitarbeiter Namen finden müssen, die die Tags von hat „Sport, Fußball, Baseball“ Cricket ohne so sollte das Ergebnis nur 2. und 3. Datensatz in diesem Beispiel zurück, wie Sie haben nicht 51 (Cricket), aber alle anderen 3, obwohl in Diff-Muster.

Meine Abfrage ist unten, aber ich konnte es nicht mehr funktioniert.

SELECT t.first_name,FROM `User` `t` WHERE (keywords like '50,52,53') LIMIT 10 

Gibt es etwas wie unähnliche Option? Ich bin verwirrt, wie das funktioniert.

+2

Daten nicht als durch Komma getrennte Objekte speichern! Es wird dir nur viel Ärger machen. – jarlh

Antwort

1

könnten Sie FIND_IN_SET verwenden:

SELECT t.first_name 
FROM `User` `t` 
WHERE FIND_IN_SET('50', `keywords`) > 0 
    AND FIND_IN_SET('52', `keywords`) > 0 
    AND FIND_IN_SET('53', `keywords`) > 0 
    AND FIND_IN_SET('51', `keywords`) = 0; 

Denken Sie daran, langsam es könnte. Der richtige Weg ist, Ihre Tabellenstruktur zu normalisieren.

1

FIND_IN_SET wird die Arbeit für Sie tun, aber es verwendet keine Indizes. Dies ist kein Fehler, es ist ein feature.

SUBSTRING_INDEX kann einen Index verwenden und die Daten wie gewünscht zurückgeben. Sie haben im Moment keinen Index, aber der Haken ist hier TEXT fields cannot be fully indexed und was Sie haben, ist ein TEXT-Feld.

Normalisieren!

Dies ist, was Sie wirklich tun sollten. Es ist keine gute Idee, kommagetrennte Werte in einer Datenbank zu speichern. Sie sollten wirklich eine Keyword-Tabelle haben und da die Schlüsselwörter kurz sind, können Sie eine char oder varchar schmale Spalte haben, die vollständig indiziert werden kann.

Verwandte Themen