假设我有一个while循环:
$sql = mysql_query("SELECT * FROM tablename");
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
$sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");
while($ro = mysql_fetch_array($sql_2)){
$id2 = $ro["id2"];
echo $id2;
}
}
然后,如果第一个查询返回5个结果,即1-5,第二个查询返回3个结果,如果我想回显第二个查询,它给我这样..........
111112222233333
我怎么能修复123以便第二个while循环应该根据我允许的次数执行........ !!我怎么能这样做......... !!
答案 0 :(得分:1)
我不确定我是否100%理解你的问题 - 这有点不清楚。
您可以使用GROUP BY子句
在查询中解决此问题$sql_2 = mysql_query("SELECT id FROM secondtable WHERE id != $id GROUP BY id");
但只有当您需要 secondtable.id
而不是任何其他列时,这才有效。
当你说“我允许的时间数量”时,你的意思是某种任意价值吗?如果是这样,那么你需要使用不同的循环机制,例如Greg B的解决方案。
答案 1 :(得分:0)
$sql = mysql_query("SELECT * FROM tablename");
$tmp = array();
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
if(!in_array($id, $tmp)) {
$sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");
while($ro = mysql_fetch_array($sql_2)){
$id2 = $ro["id2"];
echo $id2;
}
$tmp[] = $id;
}
}
将所有查询的$ id保存在数组中,以检查下一次迭代是否已被查询。我也认为对第一个查询结果进行GROUPING是一种更好的方法。
答案 2 :(得分:0)
您是否要显式限制内循环的迭代次数?
您是否考虑过使用for循环?
$sql = mysql_query("SELECT * FROM tablename");
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
$sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");
for($i=0; $i<3; $i++){
$ro = mysql_fetch_array($sql_2);
$id2 = $ro["id2"];
echo $id2;
}
}
答案 3 :(得分:0)
你的第一个while循环遍历所有5个结果,一次一个。
你的第二个while循环遍历5个结果中的每个结果,产生它自己的一组结果(即5个迭代中每个结果的3个结果,总计15个结果)。
我相信您要做的是从第二个查询中排除第一个循环中找到的所有ID。你可以这样做:
$sql = mysql_query("SELECT * FROM tablename");
$exclude = array();
while($row = mysql_fetch_array($sql)) {
array_push($exclude, $row['id']);
}
// simplify query if no results found
$where = '';
if (!empty($exclude)) {
$where = sprintf(' WHERE id NOT IN (%s)', implode(',', $exclude));
}
$sql = sprintf('SELECT * FROM secondtable%s', $where);
while($row = mysql_fetch_array($sql_2)) {
$id2 = $row["id2"];
echo $id2;
}
答案 4 :(得分:0)
我同意莱昂纳多·埃雷拉的看法,你们在这里要问的是什么并不清楚。如果您可以重写您的问题,这将有所帮助。这听起来有点像你试图查询一个表而不包括在另一个表中找到的id。你可能会尝试类似的东西:
SELECT * FROM secondtable t2
WHERE NOT EXISTS (SELECT 1 FROM tablename t1 WHERE t1.id = t2.id);