Nếu bạn cần hai id tùy ý, hãy sử dụng min() và max() :
SELECT c.`cat_name` , min(id), max(id)
FROM `info` i INNER JOIN
`category` c
ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;
Lưu ý:Bạn đang sử dụng LEFT JOIN và sau đó tổng hợp theo một cột trong giây bàn. Điều này thường không phải là một ý kiến hay, bởi vì tất cả các giá trị không khớp đều được đặt trong một NULL tập đoàn. Hơn nữa, WHERE của bạn mệnh đề biến LEFT JOIN đến một INNER JOIN Dù sao, vì vậy tôi đã sửa điều đó. WHERE mệnh đề có thể cần thiết hoặc không, tùy thuộc vào việc có hay không cat_name luôn luôn NULL .
Nếu bạn muốn hai cột lớn nhất hoặc nhỏ nhất - và có thể đặt chúng trong cùng một cột:
SELECT c.`cat_name`,
substring_index(group_concat id order by id), ',', 2) as ids_2
FROM `info` i INNER JOIN
`category` c
ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;