Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: SQL > MySQL, хитрый запрос


Автор: Gonarh 10.05.18, 06:13
Есть запрос вида
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SELECT t3.id FROM t1, t2, t3 WHERE t1.aaa=1 AND t1.bbb=2 AND t1.id_group=t2.id_group AND t2.type_result=3 AND t3.id IN (t2.possible_id)

Поле possible_id строковое, возможные варианты значений:
1,2,4
3,5,33,42
8,9,10,11,12
3,35,40,41,43
Проблема в том, что выбирается только одна запись, хотя хотелось бы все, с айдишниками перечисленными в поле possible_id.
Как то можно победить сие?

Автор: Akina 10.05.18, 06:19
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    AND t3.id IN (t2.possible_id)
замени на
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    AND FIND_IN_SET(t3.id, t2.possible_id)

Но правильнее - набить лицо архитектору и, если ещё возможно, нормализовать таблицу t2.

Автор: Gonarh 10.05.18, 06:21
Спасибо, уже сам нашел, лицо набью себе сам, по поводу нормализации, как лучше сделать, не вижу более простого пути.

Автор: Akina 10.05.18, 06:24
Создать таблицу possible_ids с полями t2_id (ссылка на запись таблицы t2) и possible_id (один id из списка, и, вероятно, числового типа). А это поле possible_id из t2 удалить нафиг.

Тогда в запрос добавится ещё одна таблица, а это условие трансформируется в
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    AND t2.id = possible_ids.t2_id AND t3.id = possible_ids.possible_id

Автор: Gonarh 10.05.18, 06:26
Бля, я тормоз, спасибо.

Автор: Bas 12.05.18, 11:59
Цитата Akina @
Создать таблицу possible_ids с полями t2_id


Цитата Akina @
А это поле possible_id из t2 удалить нафиг.

Для разных БД, Временные таблицы - затратны, удаление см п. 1. Если
Gonarh уточнит задачу то решения
Цитата Gonarh @
Бля, я тормоз, спасибо.

Могут быть другими , кроме "могучего" первого слова в цитате. :lol:

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)