1

我有一个带有这种表的数据库,有超过 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数据一次,只需增加“长度列”的值。


我尝试了此查询以按出现次数分组:

SELECT COUNT(*) SeqName FROM SeqTable GROUP BY SeqName HAVING COUNT(*)>0;
4

2 回答 2

2

这在 SQL 中而不是在编程逻辑中很容易实现:

SELECT colA, colB, SUM(Length) as `length_sum`
FROM SeqTable
GROUP BY colA, colB

当然,您仍然需要 PHP 来遍历结果集并对数据做任何您想做的事情。

于 2012-11-26T17:02:29.157 回答
1

In PHP you can use an array like an hash map

$array = Array();
$array['seq1'] = Array();
$array['seq1']['seq11'] = 0;
$array['seq1']['seq11']++;

Or you can use an SQL query like this one:

select id,colA,colB,sum(Length) as Length from {tableName} group by colA,colB order by colA, colB;
于 2012-11-26T17:03:26.040 回答