Sql 在使用组\u CONCAT的查询中忽略限制

Sql 在使用组\u CONCAT的查询中忽略限制,sql,mysql,Sql,Mysql,我需要从第二个表中选择一些行,并用逗号分隔的字符串连接它们。除了一个问题外,查询工作正常——它总是选择所有行并忽略限制 这是我的查询的一部分,它获取该字符串并忽略限制: select group_concat(value order by `order` asc SEPARATOR ', ') from slud_data left join slud_types on slud_types.type_id=slud_data.type_id where slud_dat

我需要从第二个表中选择一些行,并用逗号分隔的字符串连接它们。除了一个问题外,查询工作正常——它总是选择所有行并忽略限制

这是我的查询的一部分,它获取该字符串并忽略限制:

select 
    group_concat(value order by `order` asc SEPARATOR ', ') 
from slud_data 
    left join slud_types on slud_types.type_id=slud_data.type_id 
where slud_data.product_id=18 and value!='' and display=0 limit 3;


// Result:
+---------------------------------------------------------+
| group_concat(value order by `order` asc SEPARATOR ', ') |
+---------------------------------------------------------+
| GA-XXXX, Bentley, CONTINENTAL FLYING SPUR, 2006         |
+---------------------------------------------------------+

// Expected result: (only 3 comma-separated records, not 4)
完整查询:

SELECT *,product_id id,
    (select group_concat(value order by `order` asc SEPARATOR ', ') from slud_data left join slud_types on slud_types.type_id=slud_data.type_id where slud_data.product_id=t1.product_id and value!='' and display=0 limit 3) text
FROM slud_products t1 
WHERE 
    now() < DATE_ADD(date,INTERVAL +ttl DAY) and activated=1
ORDER BY t1.date desc

LIMIT子句限制最终结果集中的行数,而不是用于在组_CONCAT中构造字符串的行数。由于查询在最终结果中只返回一行,因此限制无效


您可以通过构造一个限制为3的子查询来解决问题,然后在外部查询中对该子查询的结果应用GROUP CONCAT。

由于这些原因,您的查询无法正常工作。您可能需要尝试以下操作:

SELECT  GROUP_CONCAT(`value` ORDER BY `order` ASC SEPARATOR ', ') 
FROM    (
           SELECT    `value`, `order`
           FROM      slud_data 
           LEFT JOIN slud_types ON slud_types.type_id = slud_data.type_id 
           WHERE     slud_data.product_id = 18 AND value != '' AND display = 0 
           LIMIT     3
        ) a;

马克·拜尔斯思想的一个例子:

SELECT GROUP_CONCAT(id, '|', name) 
FROM (
SELECT id, name
FROM users
LIMIT 3) inner