两个表的数组之间的比较

时间:2013-01-26 10:28:19

标签: php mysql arrays for-loop

我几个小时都在盯着这个。我无法找到错误。谁能告诉我我做错了什么?或者有更好的比较方法吗?

$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

但是,该程序返回零匹配。为什么呢?

3 个答案:

答案 0 :(得分:1)

所以这里发生的是

  1. 正在循环遍历结果1的所有hte元素,但是你没有正确地遍历结果2的所有元素。
  2. 结果两个元素在第一次迭代中耗尽。

    从您发布的示例数据中,这是循环:

    当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 JOINJOIN是关系数据库的基本组成部分,它允许来自多个表的数据以不同的方式相交。

我对JOIN的最喜欢的解释实际上来自Bugzilla documentation - 他们在解释所有不同类型方面做得很好。

在您的情况下,您的查询将如下所示:

SELECT
    table1.field1, table1.field2, ...,
    table2.field2, table2.field2, ...
FROM table1
INNER JOIN table2 ON (table1.id = table2.id)

我已经创建了SQL Fiddle供你细读。