我有一个 PHP 应用程序,我从这样组成的 MYSQL 表中加载数字:
日期 | BA1 | BA2 | BA3 | BA4 | BA5
2014年8月1日 1 8 66 34 89
2014年7月1日 45 32 1 48 67
2014年6月1日 17 8 90 35 31
2014年5月1日 19 12 75 31 64
2014年4月1日 32 43 18 21 67
...
等等。
此时我必须找到最多 12 行中的重复数字(12 行一个接一个)。
在上面的示例中,我应该得到数字 1
、8
、32
和 67
(因为该数字出现在第 1、2 和 5 行。如果这些数字没有出现在接下来的 12 行中,则操作必须完成。
我正在使用 PHP,我不确定实现此目的的最佳方法是在加载 MYSQL 后通过 PHP 还是直接在 MYSQL 中完成。
我该如何解决这个问题?
我必须加载数组中的所有数字(每一行一个),然后执行一个函数,或者我应该在 PHP 中加载一些结果?
最佳答案
在 php 中,您可以创建 2 个数组,一个用于数字,一个用于相同的数字,假设您的查询将是
select * from table order by date limit 12
在 php 中获取结果后,您可以循环查询结果并找到相同的数字
$numbers=array();
$identicals=array();
foreach($results as $result){
if (in_array($result['BA1'], $numbers)) {
$identicals[]=$result['BA1'];
}else{
$numbers[]=$result['BA1'];
}
/* same if else for BA2,BA3,BA4 and BA5 */
}
print_r($identicals);
只有使用Mysql才可以使用union all
SELECT num FROM(
(SELECT BA1 num FROM table1 ORDER BY `DATE` LIMIT 12)
UNION ALL
(SELECT BA2 num FROM table1 ORDER BY `DATE` LIMIT 12)
UNION ALL
(SELECT BA3 num FROM table1 ORDER BY `DATE` LIMIT 12)
UNION ALL
(SELECT BA4 num FROM table1 ORDER BY `DATE` LIMIT 12)
UNION ALL
(SELECT BA5 num FROM table1 ORDER BY `DATE` LIMIT 12)
) a
GROUP BY num
HAVING COUNT(num) > 1
ORDER BY num
关于php - MYSQL/PHP : Select identical numbers in different rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018934/