簡體   English   中英

使用GROUP_CONCAT在查詢中忽略LIMIT

[英]LIMIT ignored in query with GROUP_CONCAT

我需要從第二個表中選擇一些行,並用逗號分隔的字符串連接它們。 除了一個問題之外,查詢工作正常 - 它總是選擇所有行並忽略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應用於該子查詢的結果。

由於@Mark Byers在另一個答案中概述的原因,您的查詢無法按預期工作。 您可能需要嘗試以下方法:

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;

Mark Byers的一個例子:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM