Jika Anda membutuhkan dua id arbitrer, gunakan min() dan 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 ;
Catatan:Anda menggunakan LEFT JOIN dan kemudian menggabungkan dengan kolom di kedua meja. Ini biasanya bukan ide yang baik, karena semua yang tidak cocok ditempatkan dalam NULL kelompok. Selanjutnya, WHERE klausa mengubah LEFT JOIN ke INNER JOIN lagi pula, jadi saya sudah memperbaikinya. WHERE klausa mungkin diperlukan atau tidak, tergantung pada apakah cat_name . atau tidak pernah NULL .
Jika Anda menginginkan dua yang terbesar atau terkecil -- dan dapat menempatkannya di kolom yang sama:
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 ;