Sie sollten wahrscheinlich Ihre Design-Ansatz zu überdenken und Speichern Sie diese Fähigkeiten in einer verwandten Tabelle namens skills
mit Spalten skill_id
und skill_name
und skill_desc
, etc ... dann verwenden Sie eine Querverweistabelle, um person_id
von Ihrer Tabelle von Menschen und die skill_id
von der skills
Tabelle zu verknüpfen.
Wenn Sie ein Redesign nicht ausführen können, können Sie eine Abfrage mit einer Reihe von LIKE
Anrufe verwenden:
SELECT *
FROM people
WHERE skills LIKE '%php%'
OR skills LIKE '%java%'
OR skills LIKE '%Golang%';
Aber das ist ziemlich schlampig. Ich würde mit einem Redesign gehen. Durch die Verwendung von LIKE
wird jeder Vorteil von Indizes zunichte gemacht.
Um in den obigen mehrfachen Tabellen zu expandieren, wenn ein Benutzer eine Liste von kommagetrennten Skills eingibt, müssten Sie diese in einer Sammlung/einem Array analysieren und in der neuen Tabelle skills
nach ihrer Anwesenheit suchen. Wenn es nicht existiert, fügen Sie es ein. Dann, oder wenn es existiert, ziehen Sie die skill_id
und fügen Sie diese in die person_skills_xref
Tabelle mit der person_id
(wenn diese Kombination nicht bereits existiert). Auf diese Weise
können Sie dann wie eine select-Anweisung tun:
SELECT s.skill_id, s.skill_name, s.skill_desc
FROM skills s
JOIN people_skills_xref ps
ON s.skill_id = ps.skill_id
WHERE ps.person_id = @personID;
, dass Sie alle die Fähigkeiten für die Person, mit der person_id
von @personID
erhalten.
Oder Sie können alle Menschen in der people
Tabelle mit einer bestimmten skill_id
mit der folgenden Abfrage wählen:
SELECT p.person_id, p.person_name, p.person_email
FROM people p
JOIN people_skills_xref ps
ON ps.person_id = p.person_id
WHERE ps.skill_id = @skillId;
Oder von skill_name
LIKE
mit:
SELECT p.person_id, p.person_name, p.person_email
FROM people p
JOIN people_skills_xref ps
ON ps.person_id = p.person_id
JOIN skills s
ON s.skill_id = ps.skill_id
WHERE s.skill_name LIKE @skillName;
Wo @skillName
enthalten würde ein Suchzeichenkette von '%sql'
, um mit allem zu enden, das in sql
endet, wie mysql
, pl/sql
oder nur sql
.
Vielleicht könnten Sie ein Beispiel dafür geben, was Sie mit ** Edit 1 ** meinen. – gmiley
Verstehe nicht, warum dies abgelehnt wurde! Es ist eine ziemlich gute Illustration des Falls, in dem 'SET'-Spalten verwendet werden. – cFreed