我有一个这种表的数据库,有超过1000万行。
ID colA colB Length
1 seq1 seq11 1
2 seq1 seq11 11
3 seq3 seq33 21
4 seq3 seq33 14
我想首先循环colA,获取相关的colB值,并检查是否存在相同值的其他事件。 例如在colB(seq11)中有2次出现colA(seq1),这次我必须将它们组合起来并输出长度之和。与此类似:
ID colA colB Length
1 seq1 seq11 12
2 seq3 seq33 35
我是一个Java人,但因为我的同事用PHP编写了所有内容,这只是一个补充,我需要一个PHP解决方案。 使用Java我会使用hashmap,这样我就可以获得一次colA数据并只增加“Length Column”的值。
我尝试了这个查询,以便按出现次数进行分组:
SELECT COUNT(*) SeqName FROM SeqTable GROUP BY SeqName HAVING COUNT(*)>0;
答案 0 :(得分:2)
这在SQL中很容易实现,而不是在编程逻辑中实现:
SELECT colA, colB, SUM(Length) as `length_sum`
FROM SeqTable
GROUP BY colA, colB
当然,您仍然需要PHP来遍历结果集并执行您想要对数据执行的任何操作。
答案 1 :(得分:1)
在PHP中,您可以使用类似哈希映射的数组
$array = Array();
$array['seq1'] = Array();
$array['seq1']['seq11'] = 0;
$array['seq1']['seq11']++;
或者你可以使用像这样的SQL查询:
select id,colA,colB,sum(Length) as Length from {tableName} group by colA,colB order by colA, colB;