在while循环中运行mysql

时间:2010-10-20 17:22:32

标签: php mysql while-loop

我有一个mysql调用的while循环,但我也试图在while循环中运行另一个mysql查询,但它只执行一次。我无法理解。

这是我的代码:

$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
}

循环遍历第一个查询没问题,但第二个查询只加载第一个小部件的标题,其余的返回null。知道为什么会这样做吗?

2 个答案:

答案 0 :(得分:2)

您不必使用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列是否为NULL,或者WIDGETS表中是否有id值的记录。您需要检查第一个查询返回的值,首先确认它们在WIDGETS表中有支持记录,然后查看标题值...

答案 1 :(得分:0)

直接来自mysql_query()文档:multiple queries are not supported。你的innery查询正在杀死外部查询。