这是我的第一篇文章,如果我的问题有点奇怪,请原谅。我为一个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);