2010-10-12 10 views
1

J'ai une table SignUps, où j'enregistrer toutes les inscriptions à un événement particulier. Maintenant, j'aimerais que toutes les personnes qui se sont inscrites à un événement, avec une colonne supplémentaire STATUS indiquant si l'utilisateur est réellement accepté (STATUS = "OK") ou s'il est dans une liste d'attente (STATUS = "WL") . J'ai essayé quelque chose comme çaSQL: filtre par date

SELECT *, IDUSER IN (SELECT IDUSER FROM SIGNUPS ORDER BY DATE ASC LIMIT 10) 
as STATUS from SIGNUPS WHERE IDEVENT = 1 

Cela devrait retourner STATUS 1 pour les 10 premiers utilisateurs qui se sont inscrits et 0 pour tous les autres. Malheureusement, je reçois une erreur Mysql m'indiquant que LIMIT dans les sous-requêtes n'est pas encore supporté.

Pourriez-vous s'il vous plaît suggérer une autre façon d'obtenir les mêmes informations?

Merci

+0

Je pense qu'un 'INNER JOIN' devrait aider. –

Répondre

0

Quelque chose comme ce qui suit va obtenir ce que vous avez besoin - même si je ne l'ai pas testé contre quelques tables d'échantillons. Les sous-requêtes trouvent la date au-dessus de laquelle se produisent les dix dernières inscriptions, qui sont ensuite utilisées pour se rapprocher de la date de la ligne en cours.

select 
    s.*, 
    s.DATE > d.min_date_10 AS STATUS 
from SIGNUPS s 
    join (
     select MIN(DATE) AS min_date_10 from (
      select DATE from SIGNUPS order by DATE asc LIMIT 10 
     ) a 
    ) d 
WHERE IDEVENT = 1