如何比较从数据库中检索的两个数据数组?

时间:2014-07-07 07:06:30

标签: php sql mysqli

我有两个数组。在一个数组中,我存储来自一个表的数据。我将另一个表中的数据存储在另一个数组中。我想比较两个数组的数据。如果第一个数组的数据在第二个数组中,我想继续。我怎么能这样做?

我尝试了下面的代码,但是虽然array1编号存在于array2中,但它不是工作事件:

$x = "SELECT * FROM table1";
$data1 = mysqli_query($link, $x);
$dat1 = array()
while($row1= mysqli_fetch_array($data,MYSQLI_ASSOC))
{
  $dat1[] = $row1;
  $f1 = $row1['fid'];
}

$y = "SELECT * FROM table2";
$data2 = mysqli_query($link, $y);
$dat2 = array()
while($row2= mysqli_fetch_array($data2,MYSQLI_ASSOC))
{
  $dat2[] = $row2;
  $f2 = $row2['fid'];
}

if(in_array($dat1,$dat2))
{
  // if exists proceed
}
else
{
  // if not show error
}

7 个答案:

答案 0 :(得分:1)

这可以通过SQL完成。

检查table1中的所有fid是否在table2中:

SELECT COUNT(a.fid) FROM table1 AS a WHERE a.fid IN (SELECT b.fid FROM table2 AS b)

SELECT COUNT(*) FROM table1

如果两个值相等,那么table1中的所有fid都在table2中。

答案 1 :(得分:0)

根据您的上一条评论,您的逻辑在您的代码中是错误的。您当前正在从mysql返回中将所有行拖入$ dat1变量中,因此您无法通过将整个数组用作单个值来检查第二个数组中是否存在特定值。您还在while循环的每次迭代中覆盖$ f1。

您可以检查第一个数组返回的每个ID。

$x = "SELECT * FROM table1";
$data1 = mysqli_query($link, $x);
$dat1 = array()
while($row1= mysqli_fetch_array($data,MYSQLI_ASSOC))
{
  $dat1[] = $row1;
  $f1 = $row1['fid'];
  $y = "SELECT * FROM table2 where fid = ".$f1;
  $data2 = mysqli_query($link, $y);
  $dat2 = array();
  while($row2= mysqli_fetch_array($data2,MYSQLI_ASSOC))
  {
    //data exists in table2
  }
}

答案 2 :(得分:0)

if(in_array($data,$dat2))
{
  //if exists proceed
}
else
{
  //if not show error
}

为什么要把$ data放在这里?应该是$ dat1 no?

答案 3 :(得分:0)

你可以这样使用

 $bool=0;
 foreach ($dat1 as $a) {
    foreach ($dat2 as $b) {
        if($a==$b)
        {
            $bool=1;
            break;
        }
        else
        {
            $bool=0;
        }
    }
    if($bool==1)
    {
        break;
    }
 }
 if($bool==1)
 {
   //proceed
  }
 else
  {
     //error
   }

如果dat2中的任何值都存在于dat1中,则它将为true,您可以继续。

答案 4 :(得分:0)

正如sotirojo刚刚指出的那样,当你可以在数据库中做这件事时,不要尝试在PHP中做数据! 因此,任何能够告诉您如何在我眼中解决PHP问题的答案都是错误的答案。

SELECT table_1.* 
   FROM table_1
   JOIN table_2 USING(fid)

将返回table_1中作为table_2

存在的所有行
SELECT table_1.* 
   FROM table_1
   LEFT JOIN table_2 USING(fid)
WHERE table_2.fid IS NULL

将返回table_1中不在table_2

中的所有行

等等。

使用您的数据库进行数据操作。

答案 5 :(得分:0)

抛开sql部分,使用此函数:

function compare_array($arr1,$arr2)
{
    foreach($element as $arr1)
    {    
        foreach($element2 as $arr2)
        {
            if($element2 == $element)
            {
               return true;
            }
            else
            {

            }
        }
 return false;
}

将你的两个数组传递给你的查询,然后根据它返回 它可能有点沉重,但如果我很清楚你需要它应该工作

答案 6 :(得分:0)

根据:SQL for Dummies,INNER JOIN丢弃结果表中两个源表中没有对应行的所有行。

尝试:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;