Вы, вероятно, следует пересмотреть свой подход к проектированию и сохраните эти навыки в связанной таблице skills
с колонками skill_id
и skill_name
и skill_desc
и т. д. ... затем используйте таблицу перекрестных ссылок, чтобы связать person_id
с вашей таблицей людей, а также skill_id
из таблицы skills
.
Если вы не можете выполнить редизайн, вы можете использовать запрос с серией LIKE
звонков:
SELECT *
FROM people
WHERE skills LIKE '%php%'
OR skills LIKE '%java%'
OR skills LIKE '%Golang%';
Но это довольно неряшливо. Я бы пошел с редизайном. Использование LIKE
будет отрицать любое преимущество индексов.
Чтобы развернуть несколько таблиц выше, когда пользователь вводит список разделенных запятыми навыков, вам необходимо проанализировать это в коллекции/массиве, проверить их присутствие в новой таблице skills
. Если он не существует, вы его вставляете. Затем, или если он существует, вы потянете skill_id
и вставьте его в таблицу person_skills_xref
с помощью person_id
(если эта комбинация еще не существует).
Таким образом, вы можете сделать отборное заявление вроде:
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;
Это поможет вам все навыки для человека с person_id
из @personID
.
Или вы можете выбрать все люди в people
таблицы с определенным skill_id
с помощью следующего запроса:
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;
Или skill_name
с помощью LIKE
:
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;
Где @skillName
будет содержать строку поиска '%sql'
, чтобы соответствовать чему-либо, оканчивающемуся sql
, например mysql
, pl/sql
или просто sql
.
Возможно, вы могли бы привести пример того, что вы подразумеваете под своим ** Редактированием 1 **. – gmiley
Не понимаю, почему это было приостановлено! Это довольно хорошая иллюстрация, где можно использовать столбцы «SET». – cFreed