$count =0;
$result1 = mysql_query("SELECT fwid FROM sbsw WHERE fword = '".$searchText."'");
while ($result2= mysql_fetch_array($result1))
{
$result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2[$count]."'");
$result4= mysql_fetch_array($result3);
print $result4[$count].'<br>';
$count++;
}
mysql_free_result($result1);
mysql_free_result($result3);
答案 0 :(得分:1)
让我们看一下mysql_fetch_array的工作原理 - 例如,如果您有像
这样的表结构id | name | surname | role
1 John Smith user
2 Peter Qeep user
3 Mark Ziii admin
当您执行查询SELECT * FROM table
然后循环$result = mysql_fetch_array($query)
时,$result
将始终是包含
[0] => id,
[1] => name,
[2] => surname,
[3] => role
因此,当您执行查询$result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2[$count]."'");
时,在第一次迭代中,$count
将是0
,这是上一个查询返回的结果的关键,但是在任何进一步的迭代它会增加,这将导致一个未定义的密钥。这意味着您必须停止使用变量$count
,而只需使用$result2[0]
。
此外,更好的方法是使用MySQL JOIN
,在您的示例中它将是SELECT w.fsyn FROM sbsw s JOIN wrsyn w ON s.fwid = w.fwid WHERE s.fword = "'.$searchText.'";
答案 1 :(得分:0)
请使用合理的变量名称并正确缩进。您从每一行获得一列,因为您只对每行重复打印一次。
基本上:对于每一行,打印一列的值。
$ count-variable决定了哪一列,但它显然没有意义,它计算你所在的行。
这样的事情应该这样做:(未经测试)
$result1 = mysql_query("SELECT fwid FROM sbsw WHERE fword = '".$searchText."'");
while ($result2= mysql_fetch_array($result1))
{
$result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2['fwid']."'");
$result4= mysql_fetch_row($result3);
for($x = 0; $x < count($result4); $x++){
print $result4[$x].'<br>';
}
}
mysql_free_result($result1);
mysql_free_result($result3);
哦,我在内部循环中将fetch_array更改为fetch_row以简化迭代。