我需要从第二个表中选择一些行,并将它们连接成逗号分隔的字符串。除一个问题外,查询效果很好-它始终选择所有行,并忽略LIMIT。
这是我的查询的一部分,该查询获取该字符串并忽略LIMIT:
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子句限制最终结果集中的行数,而不是用于在GROUP_CONCAT中构造字符串的行数。由于您的查询在最终结果中仅返回一行,因此LIMIT无效。
您可以通过使用LIMIT 3构造一个子查询来解决问题,然后在外部查询中将GROUP_CONCAT应用于该子查询的结果。