Есть такой запрос PHP: $del_sql="DELETE haracteristik, haracteristik_description FROM haracteristik INNER JOIN haracteristik_description ON haracteristik_description.id = haracteristik.id WHERE haracteristik.id IN ('".trim($_POST['id'])."')"; db_query($del_sql); $del_sql="DELETE haracteristik_variants, haracteristik_variants_description FROM haracteristik_variants INNER JOIN haracteristik_variants_description ON haracteristik_variants_description.id = haracteristik_variants.id WHERE haracteristik_variants.parent_id IN ('".trim($_POST['id'])."')"; db_query($del_sql); Но он выполняется в два запроса как надо, а как его объединить в один? Делаю так: PHP: $del_sql="DELETE haracteristik, haracteristik_description, haracteristik_variants, haracteristik_variants_description FROM haracteristik, haracteristik_variants INNER JOIN haracteristik_description ON haracteristik_description.id = haracteristik.id INNER JOIN haracteristik_variants_description ON haracteristik_variants_description.id = haracteristik_variants.id WHERE haracteristik.id IN ('".trim($_POST['id'])."') OR haracteristik_variants.parent_id IN ('".trim($_POST['id'])."')"; db_query($del_sql); не работает
Здесь php только мешает чтению. Могу только посоветовать отлаживать запросы в чем-то вроде pma или mysql workbench. [offtopic] совать в тело запроса пользовательские данные без плейсхолдеров/эскейпинга это очень плохой стиль [/offtopic]
а если при планировании БД еще и внешние ключи делать адекватные - с каскадным удалением... так вообще не придется ломать над этим голову
Код (Text): DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id; https://dev.mysql.com/doc/refman/8.0/en/delete.html
Это да, но каскадное удаление как я понимаю работает только тогда когда у всех четырех таблиц есть один родитель по id а в моем же случае у меня есть две таблицы t1, t2 с одним одинаковым id и другие две t3, t4 с другим одинаковым id и они связанны через id родителя t1 и это все надо как то собрать в один запрос на удаление
ключевое слово- каскадное tabl1 -> tabl2 -> tabl3 если такая связь .. то при удалении записи из tabl3 удалится запись из tabl2 - так как удалится из tabl2 - удалится и из tabl1
Спасибо за подсказку, попробовал использовать каскадное удаление, все заработало, раньше как то не приходилось это использовать, только не сочти за наглость но подскажи вот что, допустим если есть две таблицы t1 и t2 у которых есть уникальные ключи id их я соединяю каскадно и есть третья таблица t3 у которой есть свой список с уникальным id и полем с parent_id в которых может быть созданно и 10 строк но все они будут иметь одиныковый parent_id из таблицы t1 то с каким индексом правильно будет настроить ключ в поле parent_id?
Вот код, откроешь в MySql и посмотри все ли я сделал правильно с этими каскадами? Во время удалении я обращаюсь к таблице `haracteristik` Код (Text): -- phpMyAdmin SQL Dump -- version 5.1.1 -- https://www.phpmyadmin.net/ -- -- Хост: localhost -- Время создания: Дек 08 2022 г., 18:16 -- Версия сервера: 8.0.27 -- Версия PHP: 7.4.26 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- База данных: `kaminberi` -- -- -------------------------------------------------------- -- -- Структура таблицы `haracteristik` -- CREATE TABLE `haracteristik` ( `id` mediumint UNSIGNED NOT NULL, `parent_id` mediumint UNSIGNED NOT NULL DEFAULT '0', `purpose` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `feature_style` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `feature_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'T', `filter_style` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `categories_path` text CHARACTER SET utf8 COLLATE utf8_general_ci, `position` smallint UNSIGNED NOT NULL, `status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'A' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; -- -- Дамп данных таблицы `haracteristik` -- INSERT INTO `haracteristik` (`id`, `parent_id`, `purpose`, `feature_style`, `feature_type`, `filter_style`, `categories_path`, `position`, `status`) VALUES (83, 0, 'group_catalog', 'checkbox', 'S', 'color', 'NULL', 1, 'A'), (84, 109, 'organize_catalog', 'dropdown', 'E', 'checkbox', '34,54', 1, 'A'), (85, 104, 'organize_catalog', 'brand', 'S', 'checkbox', 'NULL', 1, 'A'), (86, 109, 'describe_product', 'text', 'S', '', '34,54', 1, 'A'), (91, 0, 'group_variation_catalog', 'dropdown', 'S', 'checkbox', 'NULL', 1, 'A'), (93, 0, 'find_products', 'text', 'S', 'checkbox', '2,53,36', 1, 'A'), (104, 0, '', '', 'G', '', 'NULL', 1, 'A'), (105, 0, '', '', 'G', '', 'NULL', 1, 'A'), (107, 0, 'find_products', 'text', 'S', 'checkbox', '34,54', 1, 'A'), (109, 0, '', '', 'G', '', '34,54', 1, 'A'), (202, 0, 'find_products', 'text', 'S', 'checkbox', 'NULL', 1, 'A'); -- -------------------------------------------------------- -- -- Структура таблицы `haracteristik_description` -- CREATE TABLE `haracteristik_description` ( `id` mediumint UNSIGNED NOT NULL DEFAULT '0', `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `feature_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `description` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; -- -- Дамп данных таблицы `haracteristik_description` -- INSERT INTO `haracteristik_description` (`id`, `name`, `feature_name`, `description`) VALUES (83, 'dfgdfgdgrrrrr111', 'dfgdfgdg', '<p>gdg</p>\r\n'), (84, 'Хар1', 'fhfhrtyrt4rr555556456', ''), (85, 'hfghfg', 'hfghfghfgh', ''), (86, 'Хар2', 'Хар2', ''), (91, 'fghfhfh', 'fghfhfh', ''), (93, '1233ыв', '123', '<p>проверка</p>\r\n'), (104, 'проверка', 'проверка', ''), (105, 'укеукеуе', 'укеукеуе', '<p>описание</p>\r\n'), (107, 'укеукеуеуе', 'укеукеуеуе', ''), (109, 'укккккккк', 'укккккккк', '<p>кккккк</p>\r\n'), (202, 'пропро', 'пропро', ''); -- -------------------------------------------------------- -- -- Структура таблицы `haracteristik_variants` -- CREATE TABLE `haracteristik_variants` ( `id` mediumint UNSIGNED NOT NULL, `parent_id` mediumint UNSIGNED NOT NULL DEFAULT '0', `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `color` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `position` smallint UNSIGNED NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; -- -- Дамп данных таблицы `haracteristik_variants` -- INSERT INTO `haracteristik_variants` (`id`, `parent_id`, `url`, `color`, `position`) VALUES (55, 202, '', '#ffffff', 1), (56, 202, '', '#ffffff', 1); -- -------------------------------------------------------- -- -- Структура таблицы `haracteristik_variants_description` -- CREATE TABLE `haracteristik_variants_description` ( `id` mediumint UNSIGNED NOT NULL DEFAULT '0', `variant` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `description` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci, `page_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `meta_keywords` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '', `meta_description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; -- -- Дамп данных таблицы `haracteristik_variants_description` -- INSERT INTO `haracteristik_variants_description` (`id`, `variant`, `description`, `page_title`, `meta_keywords`, `meta_description`) VALUES (55, '', '', '', '', ''), (56, '', '', '', '', ''); -- -- Индексы сохранённых таблиц -- -- -- Индексы таблицы `haracteristik` -- ALTER TABLE `haracteristik` ADD PRIMARY KEY (`id`); -- -- Индексы таблицы `haracteristik_description` -- ALTER TABLE `haracteristik_description` ADD PRIMARY KEY (`id`); -- -- Индексы таблицы `haracteristik_variants` -- ALTER TABLE `haracteristik_variants` ADD PRIMARY KEY (`id`), ADD KEY `parent_id` (`parent_id`); -- -- Индексы таблицы `haracteristik_variants_description` -- ALTER TABLE `haracteristik_variants_description` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT для сохранённых таблиц -- -- -- AUTO_INCREMENT для таблицы `haracteristik` -- ALTER TABLE `haracteristik` MODIFY `id` mediumint UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=203; -- -- AUTO_INCREMENT для таблицы `haracteristik_variants` -- ALTER TABLE `haracteristik_variants` MODIFY `id` mediumint UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=57; -- -- Ограничения внешнего ключа сохраненных таблиц -- -- -- Ограничения внешнего ключа таблицы `haracteristik_description` -- ALTER TABLE `haracteristik_description` ADD CONSTRAINT `haracteristik_description_ibfk_1` FOREIGN KEY (`id`) REFERENCES `haracteristik` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; -- -- Ограничения внешнего ключа таблицы `haracteristik_variants` -- ALTER TABLE `haracteristik_variants` ADD CONSTRAINT `haracteristik_variants_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `haracteristik` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; -- -- Ограничения внешнего ключа таблицы `haracteristik_variants_description` -- ALTER TABLE `haracteristik_variants_description` ADD CONSTRAINT `haracteristik_variants_description_ibfk_1` FOREIGN KEY (`id`) REFERENCES `haracteristik_variants` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
не... чувак, ты не понял... я за тебя делать не собираюсь я говорю размести структуру БД в https://www.db-fiddle.com/ например.. "песочницу" для SQL тогда может я... или другие обитатели форума и заглянут посмотреть что там у тебя и подскажут что надо