Есть таблица MYSQL в базе с колонками
---------------------------------------------------- server_id | game_mod | version_ms
----------------------------------------------------
--1---------|-5,7,8,9,10,15----|-----1.9
----------------------------------------------------
--2---------|--7,55,99,20,1----|-----2.2
----------------------------------------------------
--3---------|---1,2,3,4,5,8,9---|-----3.0
----------------------------------------------------
- - тире в таблице это пробелы, чтобы таблица выглядела красиво
Данные в колонке game_mod хранятся через запятую
Мне надо вывести из таблицы сервера к примеру только с двумя модами, но у сервера много модов.
Просто LIKE % % не подходит.
Суть в том что у каждого сервера есть куда модов и названия модов хранятся в другой таблице, сюда просто id прописываются этих модов. Вот я не знаю как сделать поиск по выбраным модам.
Помогите пожалуйста, может даже другой реализацией. Колонку для каждого мода добавлять безумство, так как модов больше 100
В общем нужно составить запрос, чтобы вывести все сервера с модами 1 и 9
SELECT `s`.*
FROM `servers` AS `s`
JOIN `server_mods` AS `sm1` ON `sm1`.`server_id` = `s`.`server_id` AND `sm1`.`mod_id` = 9
JOIN `server_mods` AS `sm2` ON `sm2`.`server_id` = `s`.`server_id` AND `sm2`.`mod_id` = 1
или, если гарантируется уникальность пары (`server_id`, `mod_id`)
SELECT *
FROM `servers`
WHERE `server_id` IN (
SELECT `server_id`
FROM `server_mods`
WHERE `mod_id` IN (9, 1)
GROUP BY `server_id`
HAVING COUNT(*) = 2
)
Денис: нет, у вас не такая структура, то что вы увидели 2 названия полей которые у вас есть где-то в таблицах не значит что у вас есть такая таблица. Вопрос действительно относится к классике работы с табличными данными, читайте о реализации отношений многие ко многим.