@Virtus_pro
PHP программист

Как правильно сформировать SQL?

Здравствуйте.

Есть таблица 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

Спасибо большое тем кто поможет!
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
EreminD
@EreminD
Кое-что умею
ну, предположим, такая структура таблиц:
--servers
server_id | version_ms
1 | 1.9
2 | 2.2
3 | 3.0

--mods
mod_id | mode_name
1 | "A"
2 | "B"
3 | "C"
4 | "4"

--mods_on_servers
server_id | mod_id
1 | 1
1 | 2
1 | 3
3 | 2
3 | 3
3 | 4
2 | 2
2 | 4
----
В MS SQL это делается одним запросом:
select mod_name from mods 
where mod_id in (select mod_id from mods_on_servers where server_id = 3)

Может, в MySQL есть что-то похожее?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Классическая реализация отношения многие-ко-многим - отдельная таблица связи, в вашем случае - (`server_id`, `mod_id`).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы