[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление записей в связанных таблицах
l@pteff
всем привет,
есть таблицы users с полями: id_user, login
goods с полями: id_good, type_good, price_good
orders с полями: id_order, order_date, id_good, id_user, order_sum
Из таблицы orders выбираю заказы, хранящиеся там больше 30 дней:
  
$aselect = mysql_query("SELECT orders.id_order, orders.order_date, orders.order_sum, goods.type_good, goods.price_good, users.login, users.id_user FROM orders LEFT JOIN goods ON orders.id_good=goods.id_good LEFT JOIN users ON orders.id_user=users.id_user WHERE users.login='$username' and TO_DAYS(NOW()) - TO_DAYS(orders.order_date) > 30");

Подскажите пожалуйста, как их удалить?
Делал так:

$aselect = mysql_query("delete * FROM orders LEFT JOIN goods ON orders.id_good=goods.id_good LEFT JOIN users ON orders.id_user=users.id_user WHERE users.login='$username' and TO_DAYS(NOW()) - TO_DAYS(orders.order_date) > 30");

Ошибка:
Цитата

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM orders LEFT JOIN goods ON orders.id_good=goods.id_good LEFT JOIN users ON' at line 1

Делал так:

$aselect = mysql_query("SELECT orders.id_order, orders.order_date, orders.order_sum, goods.type_good, goods.price_good, users.login, users.id_user FROM orders LEFT JOIN goods ON orders.id_good=goods.id_good LEFT JOIN users ON orders.id_user=users.id_user WHERE users.login='$username' and TO_DAYS(NOW()) - TO_DAYS(orders.order_date) > 30") or die(mysql_error());
while (mysql_fetch_assoc($aselect)) {
$del=mysql_query("delete from goods");
}

Здесь записи не удаляются т.к. таблица orders связана с другими таблицами.



Спустя 1 минута, 54 секунды (13.06.2011 - 11:22) sharki написал(а):
http://phpclub.ru/mysql/doc/delete.html

Идея заключается в том, что удаляются только совпадающие строки из таблиц, перечисленных перед выражениями FROM или USING. Это позволяет удалять единовременно строки из нескольких таблиц, а также использовать для поиска дополнительные таблицы.
Символы .* после имен таблиц требуются только для совместимости с Access:
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
или
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id

Спустя 10 минут, 27 секунд (13.06.2011 - 11:33) l@pteff написал(а):
большое спасибо, действительно работает:
$aselect = mysql_query("delete orders FROM orders LEFT JOIN goods ON orders.id_good=goods.id_good LEFT JOIN users ON orders.id_user=users.id_user WHERE users.login='$username' and TO_DAYS(NOW()) - TO_DAYS(orders.order_date) > 30");
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.