oliboon
oliboon

Reputation: 361

Count from another table in FROM subquery

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

Answers (1)

Filipe Silva
Filipe Silva

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

Related Questions