|
|
|
|
$sql_del_group = "
DELETE FROM articles_groups
WHERE id_group = $id
AND NOT EXISTS (SELECT * FROM articles_groups WHERE pid_group = $id)
AND NOT EXISTS (SELECT * FROM articles WHERE id_group = $id)";
|
Таблица articles_groups это таблица с группами.
Таблица articles - таблица со статьями.
В группах есть подгруппы. pid_group - это id родительской группы для вложенной группы.
Данный запрос ругается так: 1093 - You can't specify target table 'articles_groups' for update in FROM clause
Как я понял, ему не наравиться вложенная таблица articles_groups, потому что удаление идет именно из этой таблицы.
Вопрос: можно ли сделать проверку существования вложенных групп и статей в группе, и удаление в одной записи? | |
|
|
|
|
|
|
|
для: tAleks
(20.12.2007 в 23:19)
| | Никто не знает? | |
|
|
|
|
|
|
|
для: tAleks
(20.12.2007 в 23:19)
| | может так?
DELETE FROM articles_groups where id_group not in (SELECT id_group FROM articles)
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(21.12.2007 в 16:48)
| | Не, так тоже не пойдет, потому что надо удалить группу если в ней нет вложенных групп.
придумал такой запрос, вроде работает:
$sql_del_group = "
DELETE articles_groups
FROM articles_groups
LEFT JOIN articles_groups AS sub ON articles_groups.id_group = sub.pid_group
LEFT JOIN articles ON articles_groups.id_group = articles.id_group
WHERE articles_groups.id_group = $id
AND articles.id_article IS NULL
AND sub.id_group IS NULL";
|
Люди знающие, прокоментируйте плиз. | |
|
|
|
|
|
|
|
для: tAleks
(21.12.2007 в 16:57)
| | DELETE articles_groups
FROM articles_groups
вы удалите таблицу из таблицы???
идея пред. скуэля такая:
удалить все группы, айди которых отсутствует в таблице статей
разве вы не этого добиваетесь?? | |
|
|
|
|
|
|
|
для: MIchail1982
(21.12.2007 в 17:26)
| | >DELETE articles_groups
> FROM articles_groups
>вы удалите таблицу из таблицы???
нет, я уделяю записи из таблицы
>идея пред. скуэля такая:
>удалить все группы, айди которых отсутствует в таблице статей
>разве вы не этого добиваетесь??
нет! Нужно удалить группу при условии если она пустая! Т.е. в ней нет вложенных групп, и в ней нет статей! | |
|
|
|
|
|
|
|
для: tAleks
(21.12.2007 в 20:57)
| | а если добавить
DELETE FROM articles_groups where id_group not in (SELECT id_group FROM articles) AND id_group=$id
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(24.12.2007 в 10:33)
| | Ну, а второе услвие проверки?
Таким запросом мы удалялем группы в которых нет статей!
НО не проверяем что в ней нет вложенных групп!
AND NOT EXISTS (SELECT * FROM articles_groups WHERE pid_group = $id)
|
Вот в чем прикол-то! Именно на это ругается мускул, что во вложенном запросе фигурирует таблица из которой производится удаление! | |
|
|
|
|
|
|
|
для: tAleks
(24.12.2007 в 15:43)
| |
DELETE FROM articles_groups where id_group not in (SELECT id_group FROM articles) AND id_group not in (SELECT pid_group FROM articles) AND id_group=$id
|
странная у вас структура БД %0) | |
|
|
|
|
|
|
|
для: MIchail1982
(24.12.2007 в 16:56)
| | pid_group нужно проверять не в статьях, а в группах!
А если его проверять в группах, то мускул ругается так:
1093 - You can't specify target table 'articles_groups' for update in FROM clause | |
|
|
|
|
|
|
|
для: tAleks
(24.12.2007 в 21:37)
| | выложите структуру | |
|
|
|
|
|
|
|
для: MIchail1982
(25.12.2007 в 10:29)
| |
--
-- Структура таблицы `articles`
--
CREATE TABLE `articles` (
`id_article` int(11) NOT NULL auto_increment,
`name` tinytext,
`description` tinytext,
`html_title` tinytext,
`html_description` tinytext,
`html_keywords` tinytext,
`pos` int(11) default NULL,
`showhide` enum('show','hide') default 'hide',
`datetime` datetime default NULL,
`ann` enum('1','0') default '0',
`id_group` smallint(5) unsigned default NULL,
PRIMARY KEY (`id_article`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=255 ;
--
-- Структура таблицы `articles_groups`
--
CREATE TABLE `articles_groups` (
`id_group` smallint(6) NOT NULL auto_increment,
`pid_group` smallint(6) default '0',
`name` tinytext,
`description` tinytext,
`html_title` tinytext,
`html_description` tinytext,
`html_keywords` tinytext,
`pos` smallint(6) default NULL,
`showhide` enum('show','hide') default 'hide',
`new` enum('1','0') default '0',
`date_add` date default NULL,
PRIMARY KEY (`id_group`),
KEY `pos` (`pos`,`showhide`,`date_add`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=42 ;
|
| |
|
|
|