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

Форум MySQL

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

 

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

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

тема: выбрать записи с id-ми не имеющимися в столбце id_parent
 
 автор: gumanoid   (24.09.2009 в 02:42)   письмо автору
 
 

Добрый день всем!
Помогите, пожалуйста составить запрос, не могу сообразить.

Структура таблицы:

CREATE TABLE `catalog` (
`id_catalog` int(8) NOT NULL auto_increment,
`name` text NOT NULL,
`description` text NOT NULL,
`pos` int(3) NOT NULL default '0',
`hide` enum('show','hide') NOT NULL default 'show',
`id_parent` int(8) NOT NULL default '0',
PRIMARY KEY (`id_catalog`),
KEY `id_parent` (`id_parent`)
) ENGINE=MyISAM AUTO_INCREMENT=62 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=62 ;

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

  Ответить  
 
 автор: Trianon   (24.09.2009 в 03:29)   письмо автору
 
   для: gumanoid   (24.09.2009 в 02:42)
 

Тема "вывести отсутствующие значения" пятью строками ниже обсуждалась несколько часов назад.

  Ответить  
 
 автор: gumanoid   (24.09.2009 в 17:39)   письмо автору
 
   для: Trianon   (24.09.2009 в 03:29)
 

Посмотрел ту тему.
Все равно не получается (плохо в запросах еще разбираюсь).
Пробовал вот так:

SELECT *
FROM catalog
LEFT JOIN catalog ON catalog.id_catalog = catalog.id_parent
WHERE catalog.id_parent IS NULL
LIMIT 0 , 30

Ответ MySQL:
#1066 - Not unique table/alias: 'catalog'

Наверное JOIN с одной моей таблицей не должен работать.
Как работать с одной таблицей? Куда копать?

  Ответить  
 
 автор: root   (24.09.2009 в 18:06)   письмо автору
 
   для: gumanoid   (24.09.2009 в 17:39)
 

используйте алиасы:
FROM catalog AS c1
LEFT JOIN catalog AS c2

Кроме того, как id_parent должен быть ..WHERE catalog.id_parent IS NULL если:
>`id_parent` int(8) NOT NULL default '0',

ступил.. сегодня и "мой день" тоже :))

  Ответить  
 
 автор: Trianon   (24.09.2009 в 18:48)   письмо автору
 
   для: gumanoid   (24.09.2009 в 17:39)
 

В запросе, кроме неоднозначности, всё правильно.
Чтобы убрать неоднозначность - применяйте алиасы, как root подсказывает.

  Ответить  
 
 автор: gumanoid   (25.09.2009 в 00:25)   письмо автору
 
   для: Trianon   (24.09.2009 в 18:48)
 

Спасибо всем за помощь, но теперь в phpmyadmin при вводе запроса:

SELECT *
FROM catalog AS c1
LEFT JOIN catalog AS c2 ON c1.id_catalog = c2.id_parent
WHERE c2.id_parent IS NULL

выводит в таком виде:

id_catalog name description pos hide id_parent id_catalog name description pos hide id_parent
11 слон роз_слон 1 show 1 NULL NULL NULL NULL NULL NULL
10 слон син_слон 1 show 9 NULL NULL NULL NULL NULL NULL

Соответственно при выводе из этой выбори в php получаются пустые значения всех полей.
Хотя теперь само количество выбранных строк совпадает с нужным количеством дочерних разделов.
Как убрать дублирование таблицы справа с NULL из выборки?
Или с этим нужно бороться уже в php? Спасибо.

  Ответить  
 
 автор: Trianon   (25.09.2009 в 01:15)   письмо автору
 
   для: gumanoid   (25.09.2009 в 00:25)
 

почему SELECT * ?
почему в SELECT не перечислить именно те столбики, которые хочется получить?

  Ответить  
 
 автор: gumanoid   (25.09.2009 в 01:36)   письмо автору
 
   для: Trianon   (25.09.2009 в 01:15)
 

Все понял, спасибо большое, вроде все заработало.

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

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