1

この種のテーブルを含むデータベースがあり、1,000万行を超えています。

ID  colA    colB    Length
1   seq1    seq11   1   
2   seq1    seq11   11  
3   seq3    seq33   21  
4   seq3    seq33   14  

最初にcolAをループして、関連するcolB値を取得し、同じ値の他のオカレンスがあるかどうかを確認したいと思います。たとえば、colB(seq11)にはcolA(seq1)が2回出現しますが、今回はそれらを組み合わせて長さの合計を出力する必要があります。これに似ています:

ID  colA  colB   Length
1   seq1  seq11  12
2   seq3  seq33  35

私は少しJavaの人ですが、同僚がすべてをPHPで記述しており、これは単なる追加であるため、PHPソリューションが必要です。Javaでは、ハッシュマップを使用していたので、colAデータを1回取得し、「LengthColumn」の値をインクリメントするだけでした。


発生ごとにグループ化するために、このクエリを試しました。

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

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;
于 2012-11-26T17:03:26.040 に答える