ФорумРазработкаБазы данных → 3 DELETE в 1

3 DELETE в 1

  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 21 марта 2009 г. 14:31

       $dell=explode("|",$_POST['dell']);

      foreach($dell as $var)
      {
      $var=(int)$var;
      mysql_query("DELETE FROM page WHERE id={$var} ");
      mysql_query("DELETE FROM images WHERE id_page={$var} ");
      mysql_query("DELETE FROM file WHERE id_page={$var} ");

      }

    Как их в 1 запрос обьединить?
    Не получилось так
    mysql_query("DELETE FROM page INNER JOIN images ON page.id=images.id_page WHERE page.id={$var} ");

    и так
    mysql_query("DELETE FROM page, images WHERE page.id={$var} AND images.id_page={$var} ");
  • Trej Gun

    Сообщения: 5302 Репутация: N Группа: в ухо

    Spritz 21 марта 2009 г. 16:14, спустя 1 час 43 минуты 19 секунд

    никак

    можешь тригеры повесить и будет каскадное удаление
    можешь хранимую процедуру сделать
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 0:06, спустя 7 часов 51 минуту 22 секунды

    во первых.

    DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
    WHERE t1.id=t2.id AND t2.id=t3.id;

    во вторых

       $dell=explode("|",$_POST['dell']);

    foreach($dell as $var)
    {
    $var=(int)$var;
    mysql_query("DELETE FROM page WHERE id={$var} ");
    mysql_query("DELETE FROM images WHERE id_page={$var} ");
    mysql_query("DELETE FROM file WHERE id_page={$var} ");

    }


    чо за хуйня?

    WHERE id IN (1,4,5,6,8,7) слабо сделать то?
    Сапожник без сапог
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 22 марта 2009 г. 2:41, спустя 2 часа 35 минут 36 секунд

    Действительно х*ня =)


    $i=0;
    foreach($dell as $var)
    {
    $var=(int)$var;
    $list_id.=$i==0?$var:",".$var;
    $i=1;
    }
    mysql_query("DELETE FROM page, images USING page INNER JOIN images INNER JOIN file WHERE page.id=images.id_page AND images.id_page=file.id_page AND page.id IN ({$list_id})");

    Всеравно не удаляет =(
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 2:57, спустя 16 минут 1 секунду

    ты моск пропил с той девушкой на аве?))))))))))))))))


    $dell=explode("|",$_POST['dell']);
    $i=0;
    foreach($dell as $var)
    {
    $var=(int)$var;
    $list_id.=$i==0?$var:",".$var;
    $i=1;
    }


    думай думай сука думай!!!!
    $dell=str_replace("|",",",$_POST['dell']);
    Сапожник без сапог
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 22 марта 2009 г. 3:27, спустя 29 минут 22 секунды

    думай думай сука думай!!!!


    мде… =)

    чет второй раз и опять х*ня =)

    а если там что нитьопасное будет, как проверить?
    20|30|тут удаление всей базы данных|44|
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 3:55, спустя 28 минут 23 секунды

    Professor,
    $del = join(',',array_map("mysql_real_escape_string",explode("|",$_POST['del'])));


    нечто такое
    Сапожник без сапог
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 22 марта 2009 г. 4:23, спустя 27 минут 41 секунду

    А может просто
    $dell=str_replace("|",",",mysql_real_escape_string($_POST['del']));

    такое будет норм работать?
  • Trej Gun

    Сообщения: 5302 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 5:04, спустя 41 минуту 18 секунд

    Professor, двухмерный массив не пройдет
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 22 марта 2009 г. 5:17, спустя 12 минут 24 секунды

    там же не двухмерный массив.
    там строка приходит

    $_POST['del']="20|30|тут удаление всей базы данных|44|";
    $dell=str_replace("|",",",mysql_real_escape_string($_POST['del']));
    $dell.="-1";


    Защитит ли это от удаления всей базы?

    или всетаки так делать?
    $dell=explode("|",$_POST['dell']);
    $i=0;
    foreach($dell as $var)
    {
    $var=(int)$var;
    $list_id.=$i==0?$var:",".$var;
    $i=1;
    }


    потому что так
    $del = join(',',array_map("mysql_real_escape_string",explode("|",$_POST['del'])));

    мне кажется хуже в данном случае
  • AlexB

    Сообщения: 4300 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 5:24, спустя 7 минут 9 секунд

    А нафига постом слать какую-то изощренную строку, че массив не прислать?

    И нафига нужны джоины в DELETE? Извращение! Три запроса куда более нормальное решение, только их надо в транзакцию засунуть.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 5:57, спустя 33 минуты 37 секунд

    Professor, я идиот! конечно

    $dell=str_replace("|",",",mysql_real_escape_string($_POST['del']));

    ))))))))))

    просто ты весь моск выклевал говнокодом вот и я начал говномыслить))
    Сапожник без сапог
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 5:58, спустя 15 секунд

    AlexB, не пугай детей транзакциями
    Сапожник без сапог
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 22 марта 2009 г. 6:06, спустя 8 минут 52 секунды

    AlexB, не пугай детей транзакциями

    Это да =)

    А нафига постом слать какую-то изощренную строку, че массив не прислать?

    Я jquery собираю все активные checkbox и удаляю эти строки.
    Можно конечно через json, но тк проще.
  • AlexB

    Сообщения: 4300 Репутация: N Группа: в ухо

    Spritz 22 марта 2009 г. 6:29, спустя 22 минуты 30 секунд


    AlexB, не пугай детей транзакциями
    Ну во первых, ничего такого страшного в транзакциях нет, как раз ИМХО достаточно понятный механизм и не сложная реализация.

    Во вторых, транзакции это так, совсем по хорошему … краями можно и забить … я знаю множество систем которые годами работали с тами последовательными делитами и проблем не возникало … тут все зависит от того насколько паронаидальны требования к надежности.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!