[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Категории и подкатегории
savelikan
привет всем. Собственно делаю категории и подкатегории страниц сайта.
Всё это работает, но... Не могу придумать запрос к БД чтоб при удалении категории удалялись все записи и подкатегории...


CREATE TABLE IF NOT EXISTS `pages` (
`pages_id` int(11) NOT NULL AUTO_INCREMENT,
`pages_address` int(11) NOT NULL,
`pages_type` int(11) NOT NULL,
`pages_user` int(11) NOT NULL,
`pages_date` int(11) NOT NULL,
`pages_update` int(11) NOT NULL,
`pages_title` varchar(200) NOT NULL,
`pages_text` text NOT NULL,
PRIMARY KEY (`pages_id`)
)
ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13 ;


pages_address - ид родительськой категории
pages_type - 0 если категория, 1 если страница

_____________
Одесса - мой город!)))
alex12060
Это можно сделать в 2 запроса.

Первым удаляем категорию
А вторым все записи, привязанные к подкатегории.


Стоп, поясни это:

Цитата

pages_address - ид родительськой категории
pages_type - 0 если категория, 1 если страница


Ты не опечатался? Может там подкатегория?
savelikan
все правильно...

Вот со вторым запросом проблема....

_____________
Одесса - мой город!)))
sergeiss
savelikan - если хочешь, чтобы тебе помогли с высокой степенью вероятности, то тогда не присоединяй файлы с кодом. А показывай код тут. Не весь, если его много, а только проблемную часть. Тогда практически каждый посмотрит на код.
Если же файл приаттачен, то не все будут его качать. Вот я точно не буду smile.gif И не только я.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Placido
Цитата (savelikan @ 11.11.2011 - 18:27)
привет всем. Собственно делаю категории и подкатегории страниц сайта.
Всё это работает, но... Не могу придумать запрос к БД чтоб при удалении категории удалялись все записи и подкатегории...

Есть вариант. Категории в одну таблицу, подкатегории - в другую, записи - в третью. Связать их внешними ключами с опцией ON DELETE CASCADE. При удалении категории будут удаляться соответствующие подкатегории и записи в связанных таблицах, при удалении подкатегории - соответствующие записи.
ENGINE=InnoDB (MyISAM не поддерживает внешние ключи).
savelikan
Цитата (sergeiss @ 11.11.2011 - 22:55)
savelikan - если хочешь, чтобы тебе помогли с высокой степенью вероятности, то тогда не присоединяй файлы с кодом. А показывай код тут. Не весь, если его много, а только проблемную часть. Тогда практически каждый посмотрит на код.
Если же файл приаттачен, то не все будут его качать. Вот я точно не буду smile.gif И не только я.

да там всего лиш PHP код если кому надо...

_____________
Одесса - мой город!)))
Placido
Два запроса. Одним создаем временную таблицу, в которую выбираем id записей, подлежащих удалению (id категорий, подкатегорий, страниц). Вторым - удаляем из таблицы pages записи, у которых id совпадает с айдишками, занесенными во временную таблицу.


CREATE TEMPORARY TABLE `temp`
SELECT `pages_id`
FROM `pages`
WHERE `pages_id` = {id категории}
OR `pages_address` = {id категории}
OR `pages_address` IN(SELECT `pages_id`
FROM `pages`
WHERE `pages_address` = {id категории});

DELETE FROM `pages` USING `pages`
INNER JOIN `temp`
ON `pages`.`pages_id` = `temp`.`pages_id`;

savelikan
не сработало....

Вот эти записи визуально можно отобразить так:


главная директория
-нова тека 1
--пвапіваіпавпві
--нова тека 2
---вапвпа
---вапвпавапівапвап
---нова тека 3
----нова тека 4
-----пусто
----вапвапваіпівап
-----пусто

INSERT INTO `pages` (`pages_id`, `pages_address`, `pages_type`, `pages_user`, `pages_date`, `pages_update`, `pages_title`, `pages_text`) VALUES
(5, 0, 0, 0, 1320501910, 0, 'нова тека 1', ''),
(
6, 5, 0, 0, 1320501917, 0, 'нова тека 2', ''),
(
7, 6, 0, 0, 1320501924, 0, 'нова тека 3', ''),
(
8, 7, 0, 0, 1320501931, 0, 'нова тека 4', ''),
(
9, 5, 1, 1, 1320501937, 0, 'пвапіваіпавпві', '<p>іваівав</p>'),
(
10, 6, 1, 1, 1320501945, 0, 'вапвпа', '<p>івапівапв</p>'),
(
11, 6, 1, 1, 1320501948, 0, 'вапвпавапівапвап', '<p>івапвапвапівапівапв</p>'),
(
12, 7, 0, 0, 1320501956, 0, 'вапвапваіпівап', '');


_____________
Одесса - мой город!)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.