2012-07-28 117 views
1

所以我有一个数据库与几个表。主要是植物。我也有一个PlantEffects表,它具有plant_id,effect_id。我需要做的是选择植物,但PlantEffects.effect_id数量排在前5位的PlantEffects。所以它会出来作为mysql获取ID数组

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

你可以发布你的表架构和一些示例数据吗?这会让你更容易回答你的问题。 – 2012-07-28 17:36:08

回答

1

如果我正确理解你的问题,你想获得前五名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