Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Поиск по полям с неизвестным количеством полей


Автор: _zorn_ 15.4.2014, 09:35
У меня возник небольшой ступор.
Например есть 2 таблицы
1. p - id,some_data
2. d - p_id,field_id,field_data
На каждую запись в таблице p может быть несколько записей из таблицы d с разными field_id

Как осуществить поиск типа "И" по нескольким полям ? Предложения по переделки структуры и т.п. принимаются.

Вот примерно как выглядел бы запрос для типа "ИЛИ"
Код

SELECT * FROM p,d WHERE p.id=d.p_id AND p.some_data LIKE 'some%' AND ((d.field_id=3 AND d.field_data LIKE 'field3data%') OR (d.field_id=6 AND d.field_data LIKE 'field6data%'))

Простой заменой OR на AND ничего не добьемся, т.к. field_id не может одновременно равняться И 3 И 6.
Или я туплю и надо отдохнуть ?

Автор: Akina 15.4.2014, 10:33
Код

Where (
   (f.type = type1 and t.val = val1)
or (f.type = type2 and t.val = val2)
...
or (f.type = typeN and t.val = valN)
      )
and count(distinct f.type = N)


Автор: _zorn_ 16.4.2014, 07:35
#1111 - Invalid use of group function

Забыл упомянуть - мускуль.

Автор: Akina 16.4.2014, 07:49
Это был шаблон алгоритма. Идея. Уж не поленись понять идею и довести до рабочего запроса.

Автор: _zorn_ 16.4.2014, 08:39
Так я понял идею. Как не крутил, получаю "Invalid use of group function"
====
Осенило smile
Код
GROUP BY p.id HAVING COUNT(*)=2

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