1

だから私はいくつかのテーブルを持つデータベースを持っています。メインはプラント。plant_id、effect_id を持つ PlantEffects テーブルもあります。Plants を選択する必要がありますが、PlantEffects.effect_id のカウントで上位 5 つの PlantEffects を使用します。したがって、次のようになります

|ID|NAME|top_effect_ids|
|1 |abc |1,4,5,6,7     |
|2 |def |3,2,9,7,5     |
4

2 に答える 2

1

私があなたの質問を正しく理解している場合、上位 5 つeffect_idの s (カウント順) を CSV リストに入れたいと考えています。

次のようなことができます。

SELECT 
    a.id, 
    a.name, 
    SUBSTRING_INDEX(GROUP_CONCAT(b.effect_id ORDER BY b.effectcnt DESC), ',', 5) AS top_effect_ids
FROM 
    plants a
INNER JOIN
(
    SELECT plant_id, effect_id, COUNT(1) AS effectcnt
    FROM planteffects
    GROUP BY plant_id, effect_id
) b ON a.id = b.plant_id
GROUP BY 
    a.id, a.name
于 2012-07-28T17:43:24.757 に答える
0

最初にテーブルを正規化する必要があります。

意味: top_effect_ids を 1 つの列に書き込むのではなく、プラント ID と効果 ID の外部キーを持つテーブルを作成し、5 行を書き込みます (例:(1,1) , (1,4) , (1,5) , (1,6) , (1,7)

詳細はこちら: https://en.wikipedia.org/wiki/Database_normalization

于 2012-07-28T17:28:58.693 に答える