За последние 24 часа нас посетили 17582 программиста и 1623 робота. Сейчас ищут 1560 программистов ...

Удаление данных из БД

Тема в разделе "PHP и базы данных", создана пользователем Kocapb, 13 авг 2008.

  1. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Здравствуйте. есть три таблицы.

    • 1. Разделы

      • section.id - первичный ключ.
      2. Категории

      • categories.id - первичный ключ.
        categories.section - вторичный ключ (связ одни-ко многим с таблицей Разделы)
      3. Товары

      • items.id - первичный ключ.
        items.category - вторичный ключ (связ одни-ко многим с таблицей Категории)
    Необходимо удалить определенный раздел и все что с ним связанно. С первыми двумя таблицами все просто:
    PHP:
    1.  
    2. <?php
    3.  
    4. include('../db.php');
    5.  
    6. $res = mysql_query("
    7.     DELETE FROM `section`
    8.     WHERE `id`=".intval($_GET['sec_id']));
    9.  
    10. $res = mysql_query("
    11.     DELETE FROM `categories`
    12.     WHERE `id`=".intval($_GET['sec_id']));
    13.  
    14. ?>
    15.  
    (sec_id переменная куда заносится выбранный раздел для удаления)
    а как удалить из таблицы Товары все что связанно с определенным разделом?
    Понимаю что надо сделать выборку по Товарам:
    [sql]
    SELECT `items` . *
    FROM `items`
    LEFT JOIN `categories` ON `items`.`category` = `categories`.`id`
    LEFT JOIN `section` ON `categories`.`section` = `section`.`id`
    [/sql]
    но как теперь это впихнуть в запрос для удаления?
     
  2. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    1. внешний ключ с каскадным обновлением
    2. триггер
    3.
    [sql]
    DELETE FROM tovar WHERE cat_id IN (SELECT id FROM categories WHERE sec_id=id_раздела);
    DELETE FROM categories WHERE sec_id = id_рвздела;
    DELETE FROM section WHERE id=id_раздела;
    [/sql]

    4. По моему как то можно из этих трех запросов сделать 2 или даже один
     
  3. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    хмм звучит как-то сложно =) должен быть вариант попроще...
    но попробую покопаться... а за вложенный селект спасибо =)
     
  4. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    хмм пробую удалять так:
    PHP:
    1.  
    2.  
    3. $res = mysql_query("
    4.     DELETE FROM `section`
    5.     WHERE `id`=".intval($_GET['sec_id']));
    6.  
    7.       $res = mysql_query("
    8.     DELETE FROM `categories`
    9.     WHERE `category`=".intval($_GET['sec_id']));
    10.  
    11.  
    до этого работает таблицы section и categories чистит а вот следующий запрос не удаляют значения:
    PHP:
    1.  
    2.  
    3. $res = mysql_query("
    4.     DELETE FROM `items`
    5.     WHERE `category` IN (SELECT `id` FROM `categories` WHERE `id`=".intval($_GET['sec_id'])));
    6.  
    7.  
    8.