我几个小时都在盯着这个。我无法找到错误。谁能告诉我我做错了什么?或者有更好的比较方法吗?
$res1=mysql_query(**query for table1**);
$n1=mysql_num_rows($res1);
$res2=mysql_query(**query for table 2**);
$n2=mysql_num_rows($res2);
for($i=0;$i<$n1;$i++)
{
$r1=mysql_fetch_row($res1);
for($j=0;$j<$n2;$j++)
{
$r2=mysql_fetch_row($res2);
if($r1[0]==$r2[0])
{
echo $r1[0]."<br>";
}
}
}
表1包含以下元素:1,2,3,16,18,19,20,21,22,24,23 表2包含:23,21
但是,该程序返回零匹配。为什么呢?
答案 0 :(得分:1)
所以这里发生的是
结果两个元素在第一次迭代中耗尽。
从您发布的示例数据中,这是循环:
当r1为1时,
r2是23,21
当r1为2时,
r2已经筋疲力尽。
要再次重置结果二,您必须执行
mysql_data_seek($ res2,0); 每次
即你的for循环看起来像这样
for($i=0;$i<$n1;$i++) {
$r1=mysql_fetch_row($res1);
mysql_data_seek($res2,0);
for($j=0;$j<$n2;$j++) {
$r2=mysql_fetch_row($res2);
if($r1[0]==$r2[0]) {
echo $r1[0]."<br>";
}
}
}
答案 1 :(得分:0)
让数据库在单个查询中进行连接。这就是它们的用途,并且它们通常使用更有效的算法,例如,如果索引可用。
答案 2 :(得分:0)
听起来你想要的是INNER JOIN
。 JOIN
是关系数据库的基本组成部分,它允许来自多个表的数据以不同的方式相交。
我对JOIN
的最喜欢的解释实际上来自Bugzilla documentation - 他们在解释所有不同类型方面做得很好。
在您的情况下,您的查询将如下所示:
SELECT
table1.field1, table1.field2, ...,
table2.field2, table2.field2, ...
FROM table1
INNER JOIN table2 ON (table1.id = table2.id)
我已经创建了SQL Fiddle供你细读。