Se você precisar de dois ids arbitrários, use
min()
e 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 ;
Observação:você está usando um
LEFT JOIN
e, em seguida, agregando por uma coluna no segundo tabela. Isso geralmente não é uma boa ideia, porque as não correspondências são todas colocadas em um NULL
grupo. Além disso, seu WHERE
cláusula transforma o LEFT JOIN
para um INNER JOIN
de qualquer forma, então eu consertei isso. O WHERE
cláusula pode ou não ser necessária, dependendo se cat_name
é sempre NULL
. Se você quiser os dois maiores ou menores - e pode suportar tê-los na mesma coluna:
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 ;