|
|
|
|
|
для: Anatoly_ua
(16.10.2006 в 18:05)
| | Короче, разобрался :)
SELECT SQL_CALC_FOUND_ROWS *, COUNT(*) AS v_skolkih_razdelah
FROM Tovar
INNER JOIN Structura ON Tovar.id=Structura.TovarID
WHERE Structura.RazdelID IN (1,2)
GROUP BY id
HAVING find_in_set(2, v_skolkih_razdelah)
LIMIT 0,10;
SELECT FOUND_ROWS();
|
Никто не в курсе, как эти SQL_CALC_FOUND_ROWS и FOUND_ROWS() с PEAR::MDB2 подружить? | |
|
|
|
|
|
|
|
для: cheops
(16.10.2006 в 13:40)
| | Структура такая планируется:
Razdel - id, ...
Tovar - id, ...
Structura - TovarID, RazdelID
Запрос вот такой пока сочинил
SELECT *, COUNT(*) AS v_skolkih_razdelah
FROM Tovar
INNER JOIN Structura ON Tovar.id=Structura.TovarID
WHERE Structura.RazdelID IN (1,2)
GROUP BY id
|
Но он выдает все товары, которые входят ИЛИ в 1 ИЛИ в 2.
В столбце v_skolkih_razdelah выводится во сколько разделов входит этот товар. Вот как бы теперь получить только те товары, у которых этот v_skolkih_razdelah равен 2 (для данного примера)?
Можно как-то проще это сделать? | |
|
|
|
|
|
|
|
для: cheops
(16.10.2006 в 13:40)
| | Да можно сказать, что пока что никакой. На данный момент у меня единственная таблица товаров, где просто есть поля, отвечающие за принадлежность товара к различным разделам (для каждого раздела -- свое поле boolean, типа)
Просто эти разделы теперь очень уж раздулись и плюс появилась там сложная иерархия, я и подумал, что проще будет сделать отдельно дерево разделов, чтоб уже добавлять их сколько угодно с любой вложенностью и т.п.
Была идея просто в товары добавить поле Razdel и в него заносить Id разделов через разделители какие-то, а потом выбирать их чем-то наподобие Like %RazdelId1%RazdelId2%RazdelId3%, но как-то это криво все. С третьей таблицей интересней немного, но еще не знаю, как эти все запросы составлять. Я так понимаю, тут еще нужно будет связи для таблиц задавать в MySQL... | |
|
|
|
|
|
|
|
|
для: Anatoly_ua
(16.10.2006 в 12:49)
| | А у вас какая структура базы данных? | |
|
|
|
|
|
|
|
для: cheops
(16.10.2006 в 00:03)
| | Но, боюсь, что такой запрос работать не будет. Или я что-то не так понял? Это запрос к третьей таблице, которая увязывает Разделы и Товары? Как я понял, ее структура такая:
| Id | TovarID | RazdelID |
Id - не уверен, что нужен, но на всякий случай...
Причем в одной строке и в TovarID, и в RazdelID хранится только одно значение, т.е. если товар входит в несколько разделов, то тогда в этой третьей таблице будет несколько строк для этого товара (будут строки с одинаковыми TovarID, но разными RazdelID.
Тогда такой запрос работать не будет. Или я где-то не так понял что-то? | |
|
|
|
|
|
|
|
для: cheops
(13.10.2006 в 12:43)
| | Я вернулся! Хотелось бы по подробней о разноуровневом каталоге!
Разноуровневый - это именно то, что вы написали, cheops!!! | |
|
|
|
|
|
|
|
для: Anatoly_ua
(15.10.2006 в 21:45)
| | Запрос может выглядеть следующим образом
SELECT
...
where
...
and
Tovar_has_Razdel.RazdelID = 7 AND
Tovar_has_Razdel.RazdelID = 4 AND
Tovar_has_Razdel.RazdelID = 16 AND
Tovar_has_Razdel.RazdelID = 9
|
Где 4, 7, 16 и 9 номера разделов. | |
|
|
|
|
|
|
|
для: cheops
(14.10.2006 в 13:15)
| | Я это понимаю, но в MySQL можно сказать совсем не разбираюсь -- только на простые запросы хватает. Если можно, подскажите, пожалуйста, как такой запрос в MySQL можно сделать? | |
|
|
|
|
|
|
|
для: Anatoly_ua
(14.10.2006 в 01:15)
| | Тогда можно добавить сравнения по количеству разделов... | |
|
|
|
|