Как правильно сформировать вывода SQL? [дубликат]

267
23 июня 2017, 10:00

На данный вопрос уже ответили:

  • mysql поиск целого числа 3 ответа

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

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

Спасибо большое тем кто поможет!

Answer 1

Почему LIKE '%...%' не подходит? Рассмотрим для каждой цифры 3 случая - цифра в начале, в середине и в конце.

select server_id, game_mod
from servers
where (game_mod like '1,%' or game_mod like '%,1,%' or game_mod like '%,1')
    and (game_mod like '9,%' or game_mod like '%,9,%' or game_mod like '%,9')
Answer 2

У вас нехорошая архитектура базы. Даже если сейчас вы решите ваш вопрос с помощью LIKE, то потом вы всё равно будете огребать всё новые и новые проблемы.

Правильно делать три таблицы:

В первой у вас будут сервера и колонок только две - server_id и version_ms.

Во второй - моды, с колонками mod_id и название мода.

А вот третья таблица (связующая) и делает всю магию. В ней две колонки - server_id и mod_id. В этой таблице для каждого сервера будет столько строк, сколько на этом сервере модов.

Более подробно вы можете нагуглить по запросам "нормализация баз данных" и "отношение многие-ко-многим".

READ ALSO
localhost в wordpress, какой реальный адрес сервера?

localhost в wordpress, какой реальный адрес сервера?

В wp-configphp указан DB_HOST как localhost

283
update экранируя кавычки(символы)

update экранируя кавычки(символы)

Приветствую! Необходимо добавить в БД примерно такого вида текст: Водка "Свояк"Получаю только первую часть

217