如何根据特定的键值从两个表(在数据库中)的比较中获得多个计数


How to get multiple counts from the comparison of tow tables(in a database) based on specific key values

这是我的第一篇文章,如果我的问题有点奇怪,请原谅。我为一个android应用程序做了一个测试项目,该应用程序将一些数据发送到服务器。java部分已经完成了,但我对服务器端的东西和数据库不太了解。所以我需要找到一种比较两张表的方法。一个小的和一个大得多的。例如,较小的是公司员工的列表,较大的是公司及其员工的数据库。我需要根据两个表的比较,用相似行的计数组成一个数组。我知道我的英语有点生疏,所以我会尽量说得更清楚:

公司x:

|id  |emp_name|age|
|2314|bob     |33 |
|2314|sam     |45 |
|2314|paul    |28 |

公司数据库:

|id  |emp_name|age|
|1342|nick    |33 |
|1342|helen   |38 |
|1342|john    |52 |
|...              |
|6742|bob     |33 |
|6742|julia   |36 |
|6742|paul    |28 |
|...              |
|7654|sam     |45 |
|6742|bob     |33 |
|6742|paul    |28 |
|...              |

所以对于上面的例子,我需要做一个像这样的数组:

|0|2|3|.....| 

我不在乎公司id,只在乎名字和年龄。

只需使用聚合SQL查询来计算两个表之间匹配的公司。然后,让PHP使用其MySQL PDO或其他数据库API将查询运行到关联数组中,和/或指定一个单独的数组并将查询计数附加到其中:

SQL查询

  SELECT s.emp_name, s.age
         COUNT(*) As emp_count
    FROM smalltable s
   INNER JOIN largetable l
      ON s.emp_name = l.emp_name
     AND s.age = l.age
GROUP BY s.emp_name, s.age

PHP编写脚本

try {
    // OPEN CONNECTION
    $dbh = new PDO("mysql:host=$hostname;dbname=$database",$username,$password);    
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT s.emp_name, s.age
                   COUNT(*) As emp_count
            FROM smalltable s
            INNER JOIN largetable l
            ON s.emp_name = l.emp_name
            AND s.age = l.age
            GROUP BY s.emp_name, s.age";
    // QUERY AND FETCH RESULTS
    $STH = $dbh->query($sql);
    $STH->setFetchMode(PDO::FETCH_ASSOC);
}
catch(PDOException $e) {  
    echo $e->getMessage();
    exit;
}
$values = [];
// ITERATE THROUGH ASSOCIATIVE ARRAY, $row
while($row = $STH->fetch()) {  
      $values[] = $row['emp_count'];  // APPEND emp_count TO $values ARRAY
      echo $row['emp_count'];         // ECHO emp_count
}
// CLOSE CONNECTION
$dbh = null;

这可能有助于

$arr=array(0=> array("id"=>'1', "emp_name"=>"bob", "age"=>33),1=> array("id"=>'2', "emp_name"=>"sam", "age"=>45),2=> array("id"=>'3', "emp_name"=>"paul", "age"=>   28));
$company=array(0=> array("id"=>'1', "emp_name"=>"bob", "age"=>33),1=> array("id"=>'2', "emp_name"=>"samd", "age"=>45),2=> array("id"=>'3', "emp_name"=>"paul", "age"=>  28),3=> array("id"=>'1', "emp_name"=>"bobe", "age"=>33),4=> array("id"=>'2', "emp_name"=>"same", "age"=>45),5=> array("id"=>'3', "emp_name"=>"paul", "age"=>    28),6=> array("id"=>'1', "emp_name"=>"bob", "age"=>33),7=> array("id"=>'2', "emp_name"=>"sam", "age"=>45),8=> array("id"=>'3', "emp_name"=>"paul", "age"=>  28));

$result=array();

foreach($arr as $ar1){
  $i=0;
  foreach($ar1 as $ar2key=>$ar2val){
    foreach($company as $comp1){
      foreach($comp1 as $comp2key=>$comp2val){
        if($ar1["emp_name"]==$comp1[$comp2key]){
           $i+=1;   
           $result[$comp2val]=$i;
         }
      }    
    } 
  }
}
print_r($result);
//$result=array_values($result);
//print_r($result);