Хитая выборка по таблице...

ilal

Новичок
есть таблица такого вида
id |id_doc|razd_doc|char_group |char | char_znach
19 2 1 1 1 3
20 2 1 1 3 13
21 2 1 1 2 6
22 2 1 1 2 8
23 2 1 1 2 10
24 2 1 1 5 21
25 2 1 1 6 27
36 1 1 1 1 5
37 1 1 1 3 11
38 1 1 1 2 7
39 1 1 1 2 10
40 1 1 1 5 22
41 1 1 1 6 28

все данные- интегеры..
первое- ид строки
второе- ид документа
третье- раздел документа
четвертое- группа признаков
пятое- номер признака
шестое- значение признака

по одной строрке на одно отношение документ-его раздел-группа признаков-признак-значение признака...

на один документ, соответственно, может быть куча строк

как осуществить поиск документов по группе признаков и их значению? по пост передаются несколько групп со списком значения... в виде массива... пхп строит массив...

проблема с запросом...

то, что я набрасал не пашет- логика корявая...

$query_is=SELECT * FROM `char_doc` WHERE `razd_doc`='1' AND `char_group`='1' AND (`char`='1' AND `char_znach`='4') AND (`char`='3' AND `char_znach`='13') AND ((`char`='2' AND `char_znach`='7') OR (`char`='2' AND `char_znach`='10')) AND (`char`='5' AND `char_znach`='22') AND (`char`='6' AND `char_znach`='28')
 

baev

‹°°¬•
Команда форума
ilal, Вы самое главное не написали: что найти-то надо?

(Мои слабые телепатические способности подсказывают, что надо заменить все «AND», которые между скобками, на «OR»…)
 

ilal

Новичок
как осуществить поиск документов по группе признаков и их значению? по пост передаются несколько групп со списком значения... в виде массива...

имеются azd_doc, char_group, char, char_znach ... последнее-массивом... ну и надо выбрать все id_doc...

одна строка таблицы- одна запись документ-его раздел-группа признаков-признак-значение признака... так что на один документ, который id_doc, приходится по несколько строк...

так понятно?

надо выбрать документы, которые принадлежат известному разделу, известна группа признаков, номер признака и несколько его значений... кроме того, искать надо, как правило, по нескольким признакам, у которых свои значения..
 

ilal

Новичок
Мои слабые телепатические способности подсказывают, что надо заменить все «AND», которые между скобками, на «OR»…
нет, не сработает... это разные признаки...

надо выбрать id_doc по нескольким azd_doc, char_group, char, char_znach... задается несколько разных azd_doc, char_group, char, char_znach...
 

ilal

Новичок
если мы в поиске указываем, что хотим выбрать цитрусовые оранжевого цвета мы же не ожидаем, что в результате получим зеленый лимон- как цитрусовый и волейбольный мячь- как оранжевый :)
 

prolis

Новичок
по поводу http://phpclub.ru/talk/threads/Проблема-выборки-в-одной-таблице.68552/
только на один параметр запрос расчитан... на id_value... как по нескольким параметрам выборку организовать? ?(
в конце указанного топика есть запрос с двумя параметрами. Аналогично можете его экстраполировать на N параметров.
 

ilal

Новичок
нет...
select q1.id_tovar, count(id) as cnt from quest q1 where id_value IN (12, 35) GROUP BY id_tovar HAVING cnt >= 2;

ищет в одной таблице по одной колонке, хоть и разные значения...

а мне нужно чтоб не только по id_value искал- id_value IN (12, 35)- найдены и их два...
мне нужно чтоб ещё и по id_value1, id_value2, id_value3... id_value1 IN (12, 35), id_value2 IN (22, 25), id_value3 IN (44, 67)...

так что простого подсчета найденных совпадений не хватит, надо ещё учитывать, что именно совпало...


причем свойства по одной колонке должны быть обязательно, а по другой- только одного из них хватит... ну представте запрос с формы выборки товара по размеру и по цвету-- шорты могут быть только либо 52 либо 54 размера, а вот цвета могут быть разными- белый, синий...

сделал, вобщем-то... только не одним запросом :( одельно проверяю каждое свойство запрошенное- id_value1 IN (12, 35), id_value2 IN (22, 25), id_value3 IN (44, 67). в цикле, смотрю, что им соответствует... для каждого свойства- массив... потом просто выбираем документы, которые есть во всех массивах, которые подходят под все запрошенные параметры.

наверное, можно и одним запросом сделать, но нет времени долго в этом копаться и хочется сохранить читаемость ... чтоб не смотреть потом два часа на странный запрос в случае переделки :)
 
Сверху