Forum Webscript.Ru

Программирование => PHP => Тема начата: grinder от 06 Мая 2002, 06:38:20

Название: выборка из базы
Отправлено: grinder от 06 Мая 2002, 06:38:20
Делаю запрос в базу, потом смотрю результаты с помощью while($row=mysql_fetch_array()). Но потом, в этом же цикле, мне нужно сделать еще один запрос, и опять использую while($row=mysql_fetch_array()). То есть $row становится другим, и когда идет проверка первого while, получается ерунда. Что делать?    


while($row=mysql_fetch_array($my->sql_res))
{

   $doc_name=$row[0];
   $n=$row[6];
   $e=$row[7];
   
   $my->sql_query="
   SELECT
     load_date,
     email,
     flag
   FROM
     opinion
   WHERE
     flag=\\"$n\\"";

   $my->sql_execute();
   
   while($row=mysql_fetch_array($my->sql_res))
 {
 /* что-то */
 }

}

?>
Название: выборка из базы
Отправлено: Metaller от 06 Мая 2002, 09:49:59
Цитировать
и опять использую while($row=mysql_fetch_array()).


используй другое имя переменной. Например $row1 :-))
Название: выборка из базы
Отправлено: Dm от 06 Мая 2002, 10:23:26
имхо, row тут не причем. тут главное поменять:
Цитировать
$my->sql_res
на другой id результата.
Название: выборка из базы
Отправлено: Metaller от 06 Мая 2002, 10:29:10
Dm Как это не при чем???
в двух разных циклах - одна переменная??
надо менять и то и другое.
Имхо
Название: выборка из базы
Отправлено: Metaller от 06 Мая 2002, 10:41:16
Ой... да... действительно.
совсем плохой стал :-(((
ДМ прав..., как всегда :-)
спасибо Алиену, что объяснил, где у меня ошибка.... (в ДНК) :-)))))
Название: выборка из базы
Отправлено: grinder от 07 Мая 2002, 00:57:32
По совету DM, я изменил id результата, то есть для выполнения запроса я написал аналогичную функцию, но результат возвращался в другую переменную sql_res_1. Может можно как-то сделать проще? А то класс для mysql как-то не очень красиво выглядит...
Вот посмотрите, две одинаковые функции, по сути(sql_execute & sql_execute_1).  
 function sql_connect()
        {
        $this->conn_id=mysql_connect($this->sql_host,$this->sql_login,$this->sql_passwd);
        mysql_select_db($this->sql_database);
        }

  function sql_execute()
        {
        $this->sql_res=mysql_query($this->sql_query,$this->conn_id);
        $this->sql_err=mysql_error();
        }

  function sql_execute_1()
        {
        $this->sql_res_1=mysql_query($this->sql_query,$this->conn_id);
        $this->sql_err_1=mysql_error();
        }

  function sql_close()
        {
        mysql_close($this->conn_id);
        }
}
?>
Название: выборка из базы
Отправлено: Dm от 07 Мая 2002, 01:18:22
grinder
в первом случае можно записать результат в любую другую переменную: $res = $my->sql_res;
следовательно, нет смысла делать вторую функцию в классе.

PS. а вообще действительно требуется вложенные запросы?
может быть, можно оптимизировать.
Название: выборка из базы
Отправлено: grinder от 07 Мая 2002, 04:04:12
Нельзя оптимизировать, в том то и дело. По крайней мере я не знаю как, хотя уже с этим сталкивался.
Я пробовал  $res = $my->sql_res;, что-то не получилось, поэтому и сделал вторую функцию. Хотя, может быть, это из-за пока еще кривых рук.
Название: выборка из базы
Отправлено: Dm от 07 Мая 2002, 23:14:42
grinder
а первый цикл заменил?
while($row=mysql_fetch_array($res))
плюс $res = $my->sql_res вставляется только один раз (в данном случае) после sql_execute до цикла.