|
|
|
| Тблица 1
g_id
g_caption
Тблица 2
gp_id
g_id (указатель на т.1)
p_id (указатель на т.3)
gp_text
Тблица 3
p_id
Тблица 4
pv_id
p_id (указатель на т.3)
pv_text
Если словами:
а) есть товары (т1), есть свойства товаров (т2), есть типы свойств (т3), есть значения типов свойств (т4);
б) одно свойство может принимать несколько заранее заданных значений на выбор;
в) каждый товар может иметь несколько свойств;
Задача — сделать фльтр; вытащить все товары, удовлетворяющие заданным свойствам.
На входе имеем p_id (тип свойства) и pv_id(id значения для этого свойства); всё это допустим для двух типо свойств («хочу видеть красные и зелёные яблоки»).
Работает у меня фильтр только если выбран один критерий (тип + ид_значения). А вот если критерия два - уже не работает.
делаю так (т.3 в запросе не учавствует):
SELECT * FROM
goods as g,
goods_prop as gp,
ptype_values as pv
WHERE g.goodTreeID=159
AND gp.goodID = g.goodID
AND pv.ptypeID = gp.ptypeID
AND pv.ptypeValue = gp.propValue
AND gp.ptypeID=40 — тип
AND pv.ptypeValueID=38 — ид_значения
AND gp.ptypeID=39 — тип
AND pv.ptypeValueID=31 — ид_значения
|
Буду признателен за помощь. спасибо. | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 01:14)
| | > «хочу видеть красные и зелёные яблоки»
красные и зеленые
или
красные либо зеленые
? | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 01:42)
| | И! | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 01:54)
| | Вы можете представить себе яблоко, которое одновременно и красное и зеленое со всех сторон? | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 02:07)
| | >Вы можете представить себе яблоко, которое одновременно и красное и зеленое со всех сторон?
ну речь то идёт о разных яблоках :)
понимю, код кривой — по этому и зов о помощи.
upd
а, стоп, отупел к ночи. Конечно, тип - цвет.
Переформулировка: «дайте зелёные яблоки сорта грин»
цвет и сорт - типы свойств
зелёные и грин - значения
только вот нюанс - таблице свойств товаров хранится не id значения, а текст. | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 02:13)
| | >ну речь то идёт о разных яблоках :)
нет, увы.
Речь в каждом конкретном случае идет об одном конкретном - очередном в очереди - яблоке, которое либо проходит фильтр либо отсеивается им. | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 02:17)
| | >нет, увы.
даже с учётом переформулировки? | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 02:19)
| | добавил.
Хотя утверждение о конкретном яблоке всё равно истинно.
Зеленое яблоко сорта антоновка я представить себе могу.
Красное - с трудом. | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 02:17)
| | UPD.
А тогда ptypeValueID (да и typeID тоже) должны оцениваться из разных псевдонимов таблицы значений (и свойств соответственно).
AND gp1.ptypeID=40 — тип
AND pv1.ptypeValueID=38 — ид_значения
AND gp2.ptypeID=39 — тип
AND pv2.ptypeValueID=31 — ид_значения | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 02:20)
| | >UPD.
>А тогда ptypeValueID (да и typeID тоже) должны оцениваться из разных псевдонимов таблицы значений (и свойств соответственно).
а если критериев - 10? генерить псевдонимы? | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 02:24)
| | А если 100?
Ну дурацкий же вопрос. | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 02:24)
| | >А если 100?
>Ну дурацкий же вопрос.
Вопрос нормальный — мало ли, может способы попроще есть.
Спасибо, пошёл сортировать яблоки. | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 02:25)
| | Хотя, яблоком чую, наверняка должен быть способ покрасивее. | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 02:28)
| | косметически - есть.
Убрать все эти межтабличные запятые. Меня лично от них тошнит.
Поставить JOIN ... ON
Ограничениена число JOINов в MySQL вроде как 61. Хватит на первых порах? | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 02:29)
| | to Zilog (14.04.2010 в 02:31)
Скорректируйте последний пост.
Сделайте переносы в коде.
Окно рвет шаблон - до кнопки "ответить" не дотянуться.
И никогда больше так код не постите.
UPD. Спасибо. | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 02:25)
| | Нельзя переключаться с процесса проектирования на процесс оптимизации до процесса реализации - до того, как заработал хоть какой-нибудь вариант.
Перед тем, как искать попроще, нужно сделать хотя бы как-нибудь. | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2010 в 02:28)
| | >Нельзя переключаться с процесса проектирования на процесс оптимизации до процесса реализации - до того, как заработал хоть какой-нибудь вариант.
>Перед тем, как искать попроще, нужно сделать хотя бы как-нибудь.
Не спорю.
подсмотрел где то такой вариант:
SELECT * FROM module_magazine_articles AS art
JOIN module_magazine_artproperty AS ap ON art.catID = 22
WHERE ap.artID = art.ArtID AND ap.cpID = 21
AND ap.apValue = 12 AND ap.cpID = 53 AND ap.apValue = 43 GROUP BY art.artID
|
и работает.
у меня несколько иная структура, но смысл тот же — думаю я ошибся в структуре, храня свойство товара как текст (т2), без id откуда оно родом. | |
|
|
|
|
|
|
|
для: Zilog
(14.04.2010 в 02:31)
| | ap.cpID = 21 AND неважно AND ap.cpID = 53
Что - опять красно-зеленые яблоки покоя не дают? :) | |
|
|
|