Могу ли я сделать своего рода DELETE с JOIN? - PullRequest
0 голосов
/ 16 мая 2011

У меня есть такая таблица в моем MySql Database:

CREATE TABLE `forum_categories` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(255) NOT NULL,
    `description` VARCHAR(255) NOT NULL,
    `date` DATETIME NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT

CREATE TABLE `forum_topics` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `category_id` INT(11) UNSIGNED NOT NULL,
    `title` VARCHAR(255) NOT NULL,
    `author` VARCHAR(255) NOT NULL,
    `date` DATETIME NOT NULL,
    `visits` INT(11) UNSIGNED NOT NULL DEFAULT '0',
    `sticky` TINYINT(11) UNSIGNED NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT

И я хотел бы, например, удалить категорию (из таблицы forum_categories) с помощью id=4.Но когда я это сделаю, я бы хотел удалить все строки в таблице forum_topics с помощью category_id=4.

Можно ли сделать что-то вроде DELETE+JOIN?К сожалению (как вы можете видеть), мой хост-провайдер не поддерживает InnoDB (что за позор ..), поэтому я не могу использовать FOREIGN KEYS: (

SOLUTION

Решено с помощью:

DELETE forum_categories.*, forum_topics.* , forum_visits.*, forum_messages.*
FROM forum_categories 
JOIN forum_topics ON forum_categories.id=forum_topics.category_id 
JOIN forum_visits ON forum_topics.id=forum_visits.topic
JOIN forum_messages ON forum_topics.id=forum_messages.topic_id
WHERE forum_categories.id=4

Ответы [ 4 ]

3 голосов
/ 16 мая 2011

также можно использовать синтаксис для нескольких таблиц:

delete a.*, b.* from forum_categories a inner join forum_topics b on a.id = b.category_id where a.id = 4

3 голосов
/ 16 мая 2011

Настройка TRIGGER для обеспечения эффекта "каскадирования".

Этот пример каскадирования MySQL должен предоставить то, что вы ищете. В частности, он вызывает, как это сделать с таблицами на основе MyISAM.

1 голос
/ 16 мая 2011

Я уже давно отвечал на этот вопрос

Mysql - удалить несколько таблиц

1 голос
/ 16 мая 2011

выглядит так, как будто вы застряли с

DELETE FROM fourm_topics WHERE category_id = 4
DELETE FROM forum_categories WHERE id = 4

в одном вызове.

...