$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);发布于 2010-09-27 02:03:26
让我们来看看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将始终是一个包含以下内容的数组(4
[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.'";
发布于 2010-09-27 02:01:02
请使用合理的变量名并适当缩进。您将从每一行中获得一列,因为您仅对您的行上的每次迭代打印一次。
基本上:对于每一行,打印一列的值。
$count-变量决定了哪一列,但它显然没有意义,因为它计算您所在的行数。
下面这样的代码应该可以做到:(未经过测试)
$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。
https://stackoverflow.com/questions/3799068
复制相似问题