Als je twee willekeurige id's nodig hebt, gebruik dan min()
en 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 ;
Let op:je gebruikt een LEFT JOIN
en vervolgens aggregeren door een kolom in de tweede tafel. Dit is meestal geen goed idee, omdat niet-overeenkomsten allemaal worden geplaatst in een NULL
groep. Verder is uw WHERE
clausule verandert de LEFT JOIN
naar een INNER JOIN
in ieder geval, dus dat heb ik opgelost. De WHERE
clausule kan al dan niet nodig zijn, afhankelijk van het feit of cat_name
is ooit NULL
.
Als je de twee grootste of kleinste wilt -- en het kan verdragen om ze in dezelfde kolom te hebben:
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 ;