Запуск mysql внутри цикла while - PullRequest
2 голосов
/ 20 октября 2010

У меня есть цикл while вызова mysql, но я также пытаюсь выполнить другой запрос mysql внутри цикла while, но он делает это только один раз.Я не могу понять это.

Вот мой код:

$sql = "SELECT * FROM widget_layout WHERE module_id=".mysql_real_escape_string($id)." AND state='".mysql_real_escape_string($page)."' AND position=".mysql_real_escape_string($position);

$query = mysql_query($sql);
while ($row = mysql_fetch_assoc($query)) {
    $layout .= $row['widget_id'].'<br/>'; //test if it is looping through all rows
    $sql2 = "SELECT title FROM widgets WHERE id=".$row['widget_id'];
    $query2 = mysql_query($sql2);
    $result2 = mysql_fetch_array($query2);
    $layout .= $result2[0]; // test the title output
}

Это первый цикл запроса без проблем, но второй запрос загружает только название первого виджетавернуть ноль для остальных.Есть идеи, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Вам не нужно использовать цикл WHILE - это можно сделать одним оператором SQL:

SELECT wl.widget_id,
       w.title
  FROM WIDGET_LAYOUT wl
  JOIN WIDGETS w ON w.id = wl.widget_id
 WHERE wl.module_id = mysql_real_escape_string($id)
   AND wl.state = mysql_real_escape_string($page) 
   AND wl.position = mysql_real_escape_string($position);

Проблема со значениями заголовков NULL зависит от того, равен ли столбец WIDGET.title NULLableили в таблице WIDGETS нет записи для значения id.Вам нужно проверить значения, возвращаемые из первого запроса, сначала подтвердить, что они имеют поддерживающие записи в таблице WIDGETS, а затем посмотреть на значение заголовка ...

0 голосов
/ 20 октября 2010

Непосредственно из mysql_query () документы: multiple queries are not supported. Ваш внутренний запрос убивает внешний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...