[RESOLU] requête sql avec condition if ou case ou having sur des dates

Eléphanteau du PHP | 19 Messages

14 sept. 2017, 16:36

Bonjour,

Je me prends la tête et me mélange les pinceaux entre le php et le sql pour mettre en place une requête.

je cherche à exploiter une valeur de ma table sous certaines conditions pour faire afficher le résultat.

Selection de base:

Code : Tout sélectionner

select nom, date_debut, date_fin from ma_table order by nom

Dans ma table, certains noms ont une date de debut et de fin (ex: 2017-09-10 et 2017-09-15),
et d'autre n'ont pas de date de début et de fin (0000-00-00 valeur par défaut pour date de début et de fin).

condition à intégrer:

- si date_debut et date_fin = 0000-00-00, on affiche

- si date_debut supérieur a date aujourd'hui, on affiche uniquement les noms avec la date de début et fin = 0000-00-00

- si date_debut inférieur à date aujourd'hui et date_fin supérieur à date aujourd'hui, on affiche les noms qui ont la date de début et de fin = 0000-00-00 et on affiche également les noms qui sont compris dans le créneau des dates.

Test de formule en cours sur la date de début
avec un if :

Code : Tout sélectionner

select nom, IF(date_debut !=0000-00-00, 'date_debut < date('Y-m-d')', 'date_debut =0000-00-00') , date_fin from ma_table where order by nom

avec un case :

Code : Tout sélectionner

select nom, date_debut, date_fin, CASE WHEN date_debut = 0000-00-00 WHEN date_debut < date('Y-m-d') WHEN date_fin > date('Y-m-d') END from ma_table order by nom

Vous vous doutez qu'aucune des deux formules ne fonctionnent.
J'en appelle à vos compétences et votre savoir faire pour m'orienter.

Merci à tous.

Hugo_064

Mammouth du PHP | 571 Messages

14 sept. 2017, 19:55

bonjour,
Dans ma table, certains noms ont une date de debut et de fin (ex: 2017-09-10 et 2017-09-15),
et d'autre n'ont pas de date de début et de fin (0000-00-00 valeur par défaut pour date de début et de fin).
le problème ne se situe pas au niveau de la requête mais dans la conception de tes tables. Certains utilisateurs sont pourvus de dates ( ont réservé par exemple) d'autres non. Ce cas de figure nécessite une table utilisateur(id, nom, pnom...) et une table acitvite(id, date_debut, date_fin, utilisateur_id). La table activite contient que les utilisateurs ayant participé à une activité, ceux n'ayant pas participé ne vont pas y figurer.
A partir de là on peut ressortir par jointure externe (Left ou Right) les utilisateurs ayant participé à l'activité dans une période donnée et ceux qui n y ont pas participé.
Après les conditions pour afficher ou pas certains champs dépend du traitement fait en php