2010-09-09 5 views
1

Actuellement, j'ai deux tables et l'instruction SQL suivante qui récupère correctement les éléments de la table des événements commandés par leurs dates dans la table event_dates:MYSQL récupérer les résultats où la date = week-end prochain

SELECT * FROM events, event_dates 
WHERE events.id=event_dates.event_id 
    AND events.preview=0 AND event_dates.start_date>=now() 
ORDER BY event_dates.start_date ASC,event_dates.start_time ASC LIMIT 3 

Maintenant, je veux ajoutez un AND supplémentaire pour vous assurer que seuls les événements du week-end suivant sont définis. La colonne date est dans un format de date mysql standard (AAAA-MM-JJ). Je suis coincé sur ce bit. À votre santé.

+0

Veuillez ne pas mélanger PHP et SQL lorsque cela est possible. Vous allez vous confondre en premier lieu. En parlant de requêtes SQL, utilisez uniquement SQL. PHP a très peu de mening avec les requêtes, il ne fait que manipuler les chaînes. –

+0

Que faire si vous interrogez un samedi? Dimanche? (Détails, Bob!) – jensgram

+0

@Col. Shrapnel Alors qu'en général, je suis d'accord avec vous sur ce sujet, je crois qu'il s'agit d'un cas particulier où un simple calcul initial de PHP (voir la réponse de @ spudley) donnera une requête beaucoup plus lisible (qui devrait contenir un peu de logique pour faire de même). – jensgram

Répondre

4

Utilisez PHP strtotime() pour obtenir le début et l'horodatage fin du week-end:

$we_start=strtotime('next saturday'); 
$we_end=strtotime('next monday')-1; 

Ensuite, faites une requête SQL pour rechercher horodatages entre eux.

select * from mytable where UNIX_TIMESTAMP(mydatefield) BETWEEN $we_start AND $we_end 

Espérons que ça aide.

+0

+1 Mieux que ce que j'avais en tête :) Bien que, l'ordre des arguments pour 'BETWEEN' importe (http://dev.mysql.com/doc/refman/5.0/fr/comparison-operators.html#operator_between) donc vous devriez probablement faire '$ real_we_start = min ($ we_start, $ we_end)' et '$ real_we_end = max ($ we_start, $ we_end)' avant d'interroger la base de données. – jensgram

+0

Bien sûr, c'est parfait – kalpaitch

+2

Ou, vous pourriez: '$ we_start = strtotime ('prochain samedi');' et '$ we_end = strtotime ('lundi suivant', $ we_start) -1;'. Je vais me taire maintenant :) – jensgram

Questions connexes