|
|
|
|
|
для: Trianon
(19.06.2007 в 15:16)
| | пока получилось так: 1 раз выполняю _ужасный_ запрос с вложенными подзапросами [>8 уровней]
передаю в $result все id возвращенные запросом.
$query = "update catalogue set status = '1' where id in $result";
|
потом update, delete в зависимости от условий/действий пользователя, где
ошибка была здесь:
from catalogue where id='$id' or pid='$id' or pid2='$id'
|
а уж потом
or pid in (select id from catalogue where pid in (select
|
ps * не самое лучшее усл. обозначения подзапросов из пред. кода)
большое спасибо за помощь. | |
|
|
|
|
|
|
|
для: Medulla
(19.06.2007 в 13:58)
| | это какие-то совсем ужасные запросы...
Там не нужно звездочки ни в том, ни в другом.
Когда исполняете запрос - контролируйте сразу, удачно ли он выполнился.
$level2 = "delete from catalogue where status
$result2 = mysql_query($level2) or die("Error in $level2: ". mysql_error());
mysql_free_result($result2);
|
А что, идею с пошаговой пометкой реализовать не получилось? | |
|
|
|
|
|
|
|
для: Trianon
(18.06.2007 в 19:21)
| | delete удаляет $id + все зависимые коды
$level2= "delete * from catalogue where * id='$id' or pid in
(select id from catalogue where pid in (select id from catalogue where pid in
(select id from catalogue where pid='$id' or pid2='$id') or pid2 in
(select id from catalogue where pid='$id' or pid2='$id')) or pid2 in
(select id from catalogue where pid in
(select id from catalogue where pid='$id' or pid2='$id') or pid2 in
(select id from catalogue where pid='$id' or pid2='$id'))) or pid2 in
(select id from catalogue where pid in (select id from catalogue where pid in
(select id from catalogue where pid='$id' or pid2='$id') or pid2 in
(select id from catalogue where pid='$id' or pid2='$id')) or pid2 in
(select id from catalogue where pid in (select id from catalogue where pid='$id' or pid2='$id') or pid2 in
(select id from catalogue where pid='$id' or pid2='$id')))";
|
update возвращает ошибку.
$level2 = "update catalogue set status = '1' where *
$result2 = mysql_query($level2);
mysql_free_result($result2) or die ("Ошибка1.");
|
| |
|
|
|
|
|
|
|
для: Trianon
(18.06.2007 в 19:21)
| | усложняю себе задачу) спасибо. | |
|
|
|
|
|
|
|
для: Medulla
(18.06.2007 в 19:12)
| | Вы явно хотите другого....
<?
$sql ="select id from catalogue where pid='$id' or pid2='$id'";
$res = mysql_query($sql);
for($result = array(); $row = mysql_fetch_assoc($res) ;)
$result[] = $row['id'];
// массив id-ов. array('23416','283741','9123874')
$result = empty($result) ? "()" : ("('". implode("','", $result) ."')");
//список id-ов. строка "('23416','283741','9123874')"
$level2= "select id from catalogue where pid IN $result or pstaff IN $result";
$result2 = mysql_query($level2);
|
Второй запрос может быть отклонен из-за размера....
>почему после for не нужны { }?
после for нужен оператор тела.
Ему необязательно быть большим составным оператором. В данном случае подошел простой - оператор вычисления выражения. | |
|
|
|
|
|
|
|
для: Trianon
(18.06.2007 в 18:09)
| | где можно прочитать подробнее? | |
|
|
|
|
|
|
|
для: Trianon
(18.06.2007 в 17:58)
| |
$sql ="select id from catalogue where pid='$id' or pid2='$id'";
$res = mysql_query($sql);
for($result = array(); $row = mysql_fetch_assoc($res) ;)
$result[] = $row['id'];
$level2= "select id from catalogue where pid='$result' or pstaff ='$result'";
$result2 = mysql_query($level2);
$num_rows = mysql_num_rows($result2);
<p>На удаление помечено '."$num_rows \n".' записей. </p>';
for ($i=0; $i <$num_rows; $i++)
{
$row = mysql_fetch_assoc($result2);
echo '<p><strong>'.($i+1).'. Код: ';
echo specialchars(stripslashes($row['id']));
echo '</strong><br />Название: ';
echo stripslashes($row['dolg']);
echo '</p>';
}
mysql_free_result($result1) or die ("Ошибка1.");
mysql_close($connection);
|
отобразились некоррекктные данные, как и в первом случае.
почему после for не нужны { }? | |
|
|
|
|
|
|
|
для: Trianon
(18.06.2007 в 17:58)
| | Между прочим...
по теме. При движке InnoDB возможен перенос некоторых каскадных действий на сам сервер. Там есть ограничения чужого ключа ON UPDATE CASCADE .... и ON DELETE CASCADE ....
Не то что это Вам сильно надо, раз не пользуетесь,.... но упомянуть стоит. | |
|
|
|
|
|
|
|
для: Medulla
(18.06.2007 в 17:51)
| | Вы хотите получить массив с id-ами в php?
Это делается несколько по-другому.
$sql ="select id from catalogue where pid='$id' or pid2='$id'";
$res = mysql_query($sql);
for($result = array(); $row = mysql_fetch_assoc($res) ;)
$result[] = $row['id'];
|
На больших объемах таблицы памяти может и не хватить. | |
|
|
|
|
|
|
|
для: Trianon
(18.06.2007 в 14:37)
| | плохой пример) имела ввиду присвоение переменной.
допустим:
$level= "delete * from catalogue where pid in (select id from catalogue where pid='$id' or pid2='$id') or pid2 in (select id from catalogue where pid='$id' or pid2='$id')";
| так работает.
присвоение+передача в запрос
$ main ="select id from catalogue where pid='$id' or pid2='$id'";
$result = mysql_query($main);
| возвращает некорректную информацию.
возможно ли его использовать? | |
|
|
|
|