Reputation: 361
I have a query used to select a random list of 25 sectors in a table.
SELECT T1.idSSecteur, T1.name_fr
FROM (
SELECT *
FROM ssecteurs
WHERE parent =316
OR parent =317
OR parent =318
ORDER BY RAND( )
LIMIT 25
)T1
ORDER BY T1.name_fr
I have another table called membres_ssecteurs
with the sectors associated with each member. I would like to get only sectors that have at least one member. I've tried adding a JOIN
clause in the subquery.
SELECT T1.idSSecteur, T1.name_fr
FROM (
SELECT ssecteurs.idSSecteur, ssecteurs.name_fr, COUNT(membres_ssecteurs.idmembre)
FROM ssecteurs
INNER JOIN membres_ssecteurs ON ssecteurs.idSSecteur = membres_ssecteurs.idssecteur
WHERE parent =316
OR parent =317
OR parent =318
ORDER BY RAND( )
LIMIT 25
)T1
ORDER BY T1.name_fr
This query returns only one row instead of the 25 Limit.
Upvotes: 1
Views: 369
Reputation: 21657
Try adding a GROUP BY ssecteurs.idSSecteur, ssecteurs.name_fr
and HAVING COUNT > 0
before the ORDER BY RAND(). This will get you rows that have at least one for the COUNT:
SELECT T1.idSSecteur,T1.name_fr
FROM (
SELECT ssecteurs.idSSecteur,ssecteurs.name_fr,COUNT(membres_ssecteurs.idmembre)
FROM ssecteurs
INNER JOIN membres_ssecteurs
ON ssecteurs.idSSecteur = membres_ssecteurs.idssecteur
WHERE parent = 316 OR parent = 317 OR parent = 318
GROUP BY ssecteurs.idSSecteur, ssecteurs.name_fr
HAVING COUNT(membres_ssecteurs.idmembre) > 0
ORDER BY RAND() LIMIT 25
) T1
ORDER BY T1.name_fr
Upvotes: 1