2010-02-18 6 views
2

je besoin d'une seule requête qui est similaire àrequête date de MySQL qui sélectionne plusieurs dates

SELECT datetime FROM blog WHERE UNIX_TIMESTAMP(datetime) < '".($date_string_in_seconds +1000)."' ORDER BY datetime DESC 

mais au lieu de retourner la dernière date à laquelle est plus petite que celle donnée en paramètre, il doit retourner:
-l'enregistrement avec la date exacte qui est donnée dans le paramètre
-s'il existe, l'un avec l'horodatage le plus tôt qui est supérieur au paramètre
-s'il existe, l'un avec l'horodatage le plus récent qui est plus petit que le paramètre (quelle est la requête? retours ci-dessus)
En d'autres termes, il SHO Je retournerai la date donnée et les autres juste après et avant. La requête doit renvoyer au plus trois enregistrements et au moins un enregistrement avec une date valide.

J'ai besoin ces informations comme base pour activer/désactiver les boutons préc et l'entrée suivante sur une page de blog et vous recevez actuellement les informations avec deux requêtes distinctes.
Je soupçonne qu'il ya une meilleure façon. Est-ce possible avec une seule requête?

Répondre

1
SELECT datetime 
FROM (
     SELECT datetime 
     FROM blog 
     WHERE datetime < FROM_UNIXTIME($date) 
     ORDER BY 
       datetime DESC 
     LIMIT 1 
     ) p 
UNION ALL 
SELECT datetime 
FROM blog 
WHERE datetime = FROM_UNIXTIME($date) 
UNION ALL 
SELECT datetime 
FROM (
     SELECT datetime 
     FROM blog 
     WHERE datetime > FROM_UNIXTIME($date) 
     ORDER BY 
       datetime 
     LIMIT 1 
     ) n 
+0

exactement. merci beaucoup! –