Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 |
Для разных БД, Временные таблицы - затратны, удаление см п. 1. Если Gonarh уточнит задачу то решения Могут быть другими , кроме "могучего" первого слова в цитате. |