【问题标题】:Limited GROUP_CONCAT with LEFT JOIN and IF statement带有 LEFT JOIN 和 IF 语句的有限 GROUP_CONCAT
【发布时间】:2012-07-28 06:15:50
【问题描述】:

我在 MySQL 中有 3 个表

fruit

id| fruit
--+-------
1 | apple
2 | banana
3 | mango
4 | plum
5 | pear
6 | cherry

list

id| name
--+------------
1 | first list
2 | second list

list_content

id| list_id | fruit_id | active
--+---------+----------+-------
1 |1        |1         |1
2 |1        |2         |1
3 |1        |3         |1
4 |2        |1         |0
5 |2        |6         |1
6 |2        |5         |1
7 |2        |4         |1
8 |2        |3         |1

因此,我需要一个由id 以降序排列的列表,其中最多3 个逗号分隔的活动元素(如果active = 1)由fruit.name 以升序排列。像这样

lists  | fruits
-------+------------------
list 2 | cherry, mango, pear
list 1 | apple, banana, mango

【问题讨论】:

    标签: mysql left-join substring group-concat csv


    【解决方案1】:

    您可以使用SUBSTRING_INDEX 仅获得前 3 个水果。

    SUBSTRING_INDEX(GROUP_CONCAT(IF(active = 1, fruit.name, null) ORDER BY fruit.name ASC),',',3)
    

    【讨论】:

    • 如何在查询中渗透 IF 语句?
    • GROUP_CONCAT 忽略了null,所以你可以把它放在那里,但是如果你能把它放在你的 WHERE/ON 子句中会更好。
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2016-01-11
    • 2014-12-16
    • 2014-05-26
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多