1

所以我有一个带有几张表的数据库。主要是植物。我还有一个 PlantEffects 表,其中包含植物 ID、效果 ID。我需要做的是选择植物,但按 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

如果我正确理解您的问题,您希望将前五名effect_id(按计数)放入 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写在一列,而是创建一个外键为Plant 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 回答