Forums / Cotonti / Core Labs / Archive / sql

каскад

CTAPbIu_MABP
#1 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)
Orkan
#2 2009-04-17 08:44
FOREIGN KEY works with InnoDB only...
Perl - the only language that looks the same before and after RSA encryption.
CTAPbIu_MABP
#3 2009-04-17 19:05
and so what? are you affraid of lost full text search? you'd better use google search with 'google site map' generator
Trustmaster
#4 2009-04-20 02:41
Триггеры и процедуры. Если их внедрять, то глобально. То же касается перехода на InnoDB (он надёжнее на больших базах, но MyISAM быстрее) и использования внешних ключей (не путать с полнотекстовыми). Большие перемены, нужно хорошенько продумать.

С удалением комментариев баг. Да, они требуют нормализации. Это потребует изменений везде, где комментарии используются (в т.ч. в плагинах), для ближайшего релиза проще устранить баг кодом com_code=p'.$id2, а в ренессансе посмотрим.

Triggers and stored procedures: they need to be integrated global. The same is about migrating to InnoDB (it is more reliable on huge databases but MyISAM is faster) and using foreign keys (foreign is not fulltext). Big changes need big thinking.

Comment removal is a bug. Yes, it needs normalization. It will require changes everywhere comments are used (including plugins). For 0.0.5 it is easier to fix the bug with com_code=p'.$id2, as for Renaissance we'll see.
May the Source be with you!
CTAPbIu_MABP
#5 2009-04-27 14:43
if you want i will help. im available in gtalk CTAPbIuMABP(a)gmail.com