Forums / Cotonti / Core Labs / Archive / sql

каскад

CTAPbIu_MABP
#11499 2009-04-17 03:31
привет всем кто меня помнит.

я у вас код в движке видел

$sql = sed_sql_query("DELETE FROM $db_pages WHERE page_id='$id'");
$sql = sed_sql_query("DELETE FROM $db_ratings WHERE rating_code='$id2'");
$sql = sed_sql_query("DELETE FROM $db_rated WHERE rated_code='$id2'");
$sql = sed_sql_query("DELETE FROM $db_com WHERE com_code='$id2'");

можно разгрузить php от выполения 4 запросов и выполнять только 1
вы используете мускул 5.1 поэтому можно использовать тригеры

если мне не изменяет память то $id2 == pid и имеер формат 'p'+db_pages.page_id для страниц

так вот если разделить в db_com (db_ratings, db_rated тоже) поле com_code на два (я не помню точно но кажется префикс db_ надо заменить на sed_ )
ALTER TABLE `db_pages` ADD `com_item` VARCHAR( 255 ) NOT NULL 
тогда надо позаменять все все вставки в html где генериться pid
$pid = sed_import('pid', 'G', 'ALP');
чтобы сюда приходили не строки типа p21 а числа типа 21
$pid = sed_import('pid', 'G', 'INT');
заменить запрос
$sql1 = sed_sql_query("SELECT * FROM $db_com WHERE com_id=$cid AND com_code='$pid' LIMIT 1");
на
$sql1 = sed_sql_query("SELECT * FROM $db_com WHERE com_id=$cid AND com_code='$pid' AND com_item='p' LIMIT 1");

и финал добавляем тригеры
ALTER TABLE `db_com`
  ADD CONSTRAINT `db_com_ibfk_1` FOREIGN KEY (`com_code`) REFERENCES `db_pages` (`page_id`) ON DELETE CASCADE ON UPDATE NO ACTION;
-- и так же на db_ratings и db_rated

если решите воспользоваться советом но не сможете понять что и как я могу проконсультировать по gtalk мой ник

CTAPbIuMABP(a)gmail.com
This post was edited by CTAPbIu_MABP (2009-04-17 03:33, 15 years ago)