|
|
|
| Делаю так:
<?php
MYSQL_QUERY('DELETE FROM photo, photo_info USING photo, photo_info
WHERE photo.id = '.$_POST['album'].' OR photo_info.photo_id = '.$_POST['album']);
?>
|
Но, это работает только при условии что в обоих таблицах есть соответствующие записи, а вот если photo_info к примеру пуста, то ничего не удаляется в первой таблицы, хотя должно бы....
Подскажите как быть? | |
|
|
|
|
|
|
|
для: Keyses
(28.06.2009 в 19:35)
| | А нафик делать удаление из двух таблиц одним запросом? | |
|
|
|
|
|
|
|
для: Keyses
(28.06.2009 в 19:35)
| | При использовании USING нужно иметь ввиду, что условие выполняется при равенстве обоих указанных столбцов, имеющихся в обеих таблицах. Поэтому и не срабатывает, USING в данном случае не оправдано. | |
|
|
|
|
|
|
|
для: GeorgeIV
(28.06.2009 в 21:48)
| | Т.е. придётся делать двумя запросами? | |
|
|
|
|
|
|
|
для: Keyses
(29.06.2009 в 01:57)
| | я бы сделал двумя | |
|
|
|
|
|
|
|
для: Keyses
(29.06.2009 в 01:57)
| | Можно обойтись и одним, если избавиться от идитской запятой между именами таблиц. | |
|
|
|
|
|
|
|
для: Trianon
(29.06.2009 в 10:01)
| | Trianon, а в принципе запрос вообще по моему неправильно записан - в списке USING используется список соединяемых столбцов и используется он с JOIN вместо WHERE , или я ошибаюсь (мало работаю в последнее время с БД) | |
|
|
|
|
|
|
|
для: GeorgeIV
(29.06.2009 в 21:47)
| | >Trianon, а в принципе запрос вообще по моему неправильно записан - в списке USING используется список соединяемых столбцов
верно.
Может у автора и столбцы такие есть? Хотя это уже врядли...
>и используется он с JOIN вместо WHERE
с JOIN вместо запятой. WHERE тут не при чем
О чем я и написал. На названия столбцов внимание не обратил. | |
|
|
|
|
|
|
|
для: Trianon
(29.06.2009 в 21:58)
| | Хочется довести до конца теоретические изыскания :-)
Как я думаю - для соединения таблиц используется либо JOIN либо тета-соединение с WHERE, но одновременного использования я не встречал. И при JOIN USING используется, если список имен используемых столбцов в обеих таблицах совпадает (рассматриваем вариант для двух объединяемых страниц), иначе используется ON с условиями соединения. | |
|
|
|
|
|
|
|
для: GeorgeIV
(30.06.2009 в 10:48)
| | >Хочется довести до конца теоретические изыскания :-)
>Как я думаю - для соединения таблиц используется либо JOIN либо тета-соединение с WHERE, но одновременного использования я не встречал.
Никто не мешает на результирующую таблицу наложить через WHERE
а) дополнительные условия (описывающие не правила соединения, а фильтр отбора)
б) для внешнего соединения - обратное условие. Например, чтобы отобрать не сочетающиеся строки.
При JOIN USING используется, если список имен используемых столбцов в обеих таблицах совпадает
не всех, а лишь тех (или даже того в большинстве случаев) , по которому выполняется соединение.
Поскольку USING в MySQL претерпела относительно недавние довольно сильные семантические изменения Join Processing Changes in MySQL 5.0.12 то применяют эту достаточно удобную форму пока что с опаской, дабы избежать разночтения... | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2009 в 11:06)
| | ммм... да, сильно стал отставать от MySQL. пора читать.... | |
|
|
|
|
|
|
|
для: Trianon
(29.06.2009 в 10:01)
| | Почитав немного это:
For the first multiple-table syntax, only matching rows from the tables listed before the FROM clause are deleted. For the second multiple-table syntax, only matching rows from the tables listed in the FROM clause (before the USING clause) are deleted. The effect is that you can delete rows from many tables at the same time and have additional tables that are used only for searching:
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
|
Or:
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
|
These statements use all three tables when searching for rows to delete, but delete matching rows only from tables t1 and t2.
The preceding examples use INNER JOIN, but multiple-table DELETE statements can use other types of join allowed in SELECT statements, such as LEFT JOIN. For example, to delete rows that exist in t1 that have no match in t2, use a LEFT JOIN:
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
|
Сделал так:
<?php
MYSQL_QUERY('DELETE photo, photo_info
FROM photo
LEFT JOIN photo_info
ON photo_info.photo_id = '.$_POST['album'].'
WHERE photo.id = '.$_POST['album']);
?>
|
Всё прекрасно работает :) | |
|
|
|
|
|
|
|
для: Keyses
(09.07.2009 в 00:35)
| | У Вас запрос явно с ошибкой синтаксиса.
Кроме того, тогда уж
mysql_query('
DELETE photo, photo_info
FROM photo
LEFT JOIN photo_info
ON photo_info.photo_id = photo.id
WHERE photo.id = '. $_POST['album']);
|
Хотя вполне можно обойтись двумя независимыми запросами. | |
|
|
|
|
|
|
|
для: Trianon
(09.07.2009 в 00:42)
| | точно, сенкс :) | |
|
|
|