mysql获取id数组

时间:2012-07-28 17:26:17

标签: mysql database select count

所以我有一个包含几张桌子的数据库。主要是植物。我还有一个PlantEffects表,它有plant_id,effect_id。我需要做什么选择植物,但通过植物效应.Effect_id计算前5个PlantEffects。所以它会出现

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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