【问题标题】:comparison between arrays of two tables [closed]两个表的数组之间的比较[关闭]
【发布时间】:2013-01-26 10:28:19
【问题描述】:

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

$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

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

【问题讨论】:

标签: php mysql arrays for-loop


【解决方案1】:

所以这里发生的是

  1. 您正在正确循环结果 1 的所有 hte 元素,但您没有正确循环结果 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>";
        }
    }
}

【讨论】:

    【解决方案2】:

    让数据库在单个查询中进行连接。这就是它们的用途,它们通常使用更高效的算法,例如,如果索引可用。

    【讨论】:

      【解决方案3】:

      听起来你想要的是INNER JOINJOIN 是关系数据库的基本组件,它允许来自多个表的数据以不同的方式相交。

      我对@9​​87654325@s 最喜欢的解释实际上来自Bugzilla documentation——他们很好地解释了所有不同的类型。

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

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

      我创建了一个SQL Fiddle 供您阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 2019-08-13
        • 2017-06-13
        • 2014-08-07
        • 1970-01-01
        • 2017-06-19
        相关资源
        最近更新 更多