|
|
|
| Есть две таблицы:
1 - picture которая содержит данные о рисунке и ссылается в каталог полем catalog_id
2 - catalog которая содержит названия каталога и его уровни
таблица catalog содержит поля id, pid. Картинки не могут хранится в уровне с pid = 0
Делаю запрос:
SELECT * FROM `catalog`
WHERE `catalog`.`pid` = '0' AND
(SELECT SUM(`picture`.`catalog_id`) FROM `picture`
WHERE `picture`.`catalog_id` =
(SELECT `catalog`.`id` FROM `catalog`
WHERE `catalog`.`pid` = `catalog`.`id`)) > 0
|
Тем самым хочу вывести только уровни с pid = 0, но которые содержат в себе уровни с pid != 0 и при этом, содержащие в себе хотябы одну картинку.
Я понимаю что в последнем SELECT `catalog`.`id` уже рыщес среди тех, которые уже учавствуют в запросе.... Можно как-нить сделать, чтобы последний SELECT выбирал заного из таблицы? | |
|
|
|
|
|
|
|
для: kireyev
(09.08.2011 в 14:40)
| | pid содержит id родительского каталога? А на сколько глубоко могут быть вложены каталоги, вы ограничены только первым уровнем или уровень вложения не ограничен (в последнем случае придется использовать рекурсию или вспомогательную кэш-таблицу со списком вложенных каталогов)? | |
|
|
|
|
|
|
|
для: cheops
(09.08.2011 в 17:08)
| | pid - родительский каталог, верно. Уровень вложенности 1. | |
|
|
|
|
|
|
|
для: kireyev
(10.08.2011 в 05:12)
| | Попробуйте коррелированный запрос
SELECT * FROM `catalog`
WHERE `catalog`.`pid` = '0' AND
(SELECT SUM(*) FROM `picture`
WHERE `picture`.`catalog_id` = `catalog`.`id`) > 0
|
| |
|
|
|
|
|
|
|
для: cheops
(10.08.2011 в 10:43)
| | Ваш коррелированный запрос...выдает ошибку, но сам я дошел до такого:
SELECT * FROM `catalog` WHERE `catalog`.`id` IN (SELECT `catalog`.`pid` FROM `catalog`, `picture` WHERE `catalog`.`id` = `picture`.`catalog_id`
|
| |
|
|
|