@jemanov

Как сделать выборку из Mysql таблицы по полю с несколькими значениями?

Как быть, есть три таблицы
1. cities
id | name
--------------
1  | Moskow
2  | Kirow
3  | Orel
....


2. categories
id | name
--------------
1  | name1
2  | name2
3  | name3
...


И есть третья таблица - список компаний:
id  |    name   |  cities_id   |    categories_id
----------------------------------------------------
1   | alpha     | 1,2,5,18     | 3,76,78
2   | betta     | 2,14,31      | 13,60,75
3   | gamma     | 1,17,19      | 95,101
....


Вопрос следующий:
Как удобно делать выборку компаний по городу, категории, городу и категории вместе, если каждая компания может работать в нескольких городах и выполнять несколько категорий работ?
варианты из 1930 городов, 285 категорий.

Раньше я использовал:
- FILD_IN_SET() но сейчас значений больше чем 64 и этот вариант не годится.
- ENUM тоже не получается, так как поля cities_id и categories_id могут содержать сразу несколько значений
- переводил все это в многомерный массив потом на php искал.
- делал всякие WHERE cities_id LIKE '%,5,%' OR cities_id LIKE '5,%' OR cities_id LIKE '%,5' (как и варианты с дописыванием в поле в начале и конце запятых, для сокращения количества OR).
- еще советовали связать таблицы, но как это сделать когда в cities_id и categories_id несколько значений, да и как потом выбирать с учетом этих связей, я не сумел разобраться (не нашел примеров нормальных, так как не знал что даже искать, да и то ли это, что нужно?)

Есть ли красивые решения которые используются в профессиональной среде, или все так и лепят как я?
Разъясните, гуру, очень хочу разобраться.
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
разберитесь с нормальными формами БД и перепроектируйте по нормальному базу данных.
Ответ написан
Ваш ответ на вопрос

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

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