我有一个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。知道为什么会这样做吗?
答案 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查询正在杀死外部查询。