Bonjour à tous,
Je viens vous voir pour vous exposer un problème.
Je possède la table suivante :
Cette table contient les horaires d'ouverture de restaurants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE horaires ( client_id double unsigned NOT NULL, debutPeriode date NOT NULL default '0000-00-00', finPeriode date NOT NULL default '0000-00-00', jour enum('0','1','2','3','4','5','6') collate utf8_swedish_ci NOT NULL, ouverture1 time default NULL, fermeture1 time default NULL, ouverture2 time default NULL, fermeture2 time default NULL, note text collate utf8_swedish_ci NOT NULL, PRIMARY KEY (client_id,debutPeriode,finPeriode,jour) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=COMPACT;
Les horaires d'ouverture peuvent varier à certaines période de l'année. (Ex: Pendant les 2 mois d'été)
Je souhaite, lors de la lecture de cette table, lire les horaires qui correspondent à la période actuelle. Je dois donc remplacer les horaires globaux (de période '0000-00-00') par la période concernée.
Dans l'ordre je fais donc :
- Select tous les horaires globaux
- Retire les horaires des jours concernés par une période particulière
- Ajoute a cette suppression les horaires des jours de la période particulière
Ce qui correspond au code :
Cette méthode fonctionne, mais elle répète deux fois la même sélection, et peut être y a-t-il moyen de directement remplacer les n-uplets concerné ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM horaires WHERE client_id='2' AND debutPeriode = '0000-00-00' and jour not in ( SELECT jour FROM horaires as temp WHERE client_id='2' AND ((debutPeriode<=NOW() OR (YEAR(debutPeriode) = '0000' AND MONTH(debutPeriode) <= MONTH(NOW()) AND DAY(debutPeriode) <= DAY(NOW()) ) ) AND (finPeriode>=NOW() OR (YEAR(finPeriode) = '0000' AND MONTH(finPeriode) >= MONTH(NOW()) AND DAY(finPeriode) >= DAY(NOW()) ) )) ) UNION ( SELECT * FROM horaires as temp WHERE client_id='2' AND ((debutPeriode<=NOW() OR (YEAR(debutPeriode) = '0000' AND MONTH(debutPeriode) <= MONTH(NOW()) AND DAY(debutPeriode) <= DAY(NOW()) ) ) AND (finPeriode>=NOW() OR (YEAR(finPeriode) = '0000' AND MONTH(finPeriode) >= MONTH(NOW()) AND DAY(finPeriode) >= DAY(NOW()) ) )) )
Merci beaucoup si quelqu'un peut m'éclairer![]()
Partager