为什么只返回数组的第一个元素?
$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);
让我们一起来看看如何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.'";
谢谢cypher! – Astraport 2010-09-26 18:18:00
请使用合理的变量名称并正确缩进。您每行都会得到一列,因为您只在每行上打印一次行。
基本上:对于每一行,打印一列的值。
$ 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缓解迭代。
这并不能解决主要问题 - '$ result2 [$ count]',因此它不起作用。 – cypher 2010-09-26 18:09:34
哦,我的,谢谢:)虽然现在应该工作,作为他的方法最接近的解决方案,即使加入明显更好 – 2010-09-26 18:15:21
编辑后也不会工作,你正在使用mysql_fetch_array这是BY DEFAULT返回一个numeric-索引数组,你需要使用选项'MYSQL_ASSOC'('mysql_fetch_array($ query,MYSQL_ASSOC);')来获得关联数组键:-) – cypher 2010-09-26 18:16:26
我没有看到任何归国发生。请澄清你的问题。 – NullUserException 2010-09-26 17:53:33
您还需要了解如何使用'JOIN' s – NullUserException 2010-09-26 17:58:32