Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите братцы с уровнями дерева
 
 автор: kireyev   (09.08.2011 в 14:40)   письмо автору
 
 

Есть две таблицы:
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 выбирал заного из таблицы?

  Ответить  
 
 автор: cheops   (09.08.2011 в 17:08)   письмо автору
 
   для: kireyev   (09.08.2011 в 14:40)
 

pid содержит id родительского каталога? А на сколько глубоко могут быть вложены каталоги, вы ограничены только первым уровнем или уровень вложения не ограничен (в последнем случае придется использовать рекурсию или вспомогательную кэш-таблицу со списком вложенных каталогов)?

  Ответить  
 
 автор: kireyev   (10.08.2011 в 05:12)   письмо автору
 
   для: cheops   (09.08.2011 в 17:08)
 

pid - родительский каталог, верно. Уровень вложенности 1.

  Ответить  
 
 автор: cheops   (10.08.2011 в 10:43)   письмо автору
 
   для: 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

  Ответить  
 
 автор: kireyev   (10.08.2011 в 10:59)   письмо автору
 
   для: 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`

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования