Хорошо.Теперь, когда вы обновили свой вопрос немного больше, ответ становится «да, это можно сделать, но вы не обязательно должны делать это так».
Во-первых, просто чтобы показать, что это может бытьготово:
SELECT u.* FROM users u
INNER JOIN skills s1 ON (u.id = s1.user_id AND s1.skill_name = 'php')
INNER JOIN skills s2 ON (u.id = s2.user_id AND s2.skill_name = 'html')
WHERE s1.skill_level = 2 AND s2.skill_level = 1 GROUP BY u.id;
Если бы вы объяснили, что вы хотели вначале, я бы сэкономил немного времени при наборе текста!:)
Теперь вы должны сделать выше?Это не очень красиво, но принцип в том, что вы присоединяетесь к столу дважды для обоих умений, используя псевдонимы (s1 и s2), чтобы скрыть тот факт, что это одна и та же таблица.Иногда это правильный подход.Проблема в том, что я подозреваю, что у вас будет множество вариаций, когда вам захочется иногда найти людей с большим количеством навыков на разных уровнях, иногда только один, и так далее.Вы могли бы найти, что написание кода для автоматической генерации этих запросов немного сложнее, и он не обязательно будет хорошо масштабироваться.
Вам нужно , чтобы ознакомиться с нормализацией базы данных, чтобы лучше проектировать ваши таблицы.И у вас также должно быть поле id для таблицы навыков, и тогда вам будет проще использовать подзапросы, когда вам нужно.