Requete BETWEEN

Mammouth du PHP | 643 Messages

23 nov. 2016, 19:10

Salut ou Re pour certains
Après avoir réglé mon premier problème il me reste celui de la requete pour le "weekend"
Tout mes filtres marche mais sois je m'y prend mal soit un problème de syntaxe dans ma requete.

Le but étant d'afficher les annonces du week end de la semaine en cours
// Gestion par date rapide
	  switch ($_GET["date"]) :
	  default:
	  case "toutes" :
	  $sql .= "";
	  break;
	  
	  case "aujourdhui" :
	  $sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('today'))."'";
	  break;
	  
	  case "demain":
	  $sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d h:i:s',strtotime('tomorrow'))."'";
	  break;
	  
	  case "weekend" :
	  $sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d',strtotime('next Saturday'))."' AND loisirs.date_fin_sortie >= ".date('Y-m-d',strtotime('next Monday'))."'"; //démarre à minuit
	  break;
	  endswitch;
La requete concerné exacte:
case "weekend" :
	  $sql .= " AND loisirs.date_fin_sortie <= '".date('Y-m-d',strtotime('next Saturday'))."' AND loisirs.date_fin_sortie >= ".date('Y-m-d',strtotime('next Monday'))."'"; //démarre à minuit
	  break;
Merci encore à vous tous ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 nov. 2016, 19:33

Et quel est le problème ?

Affiche ta requête et teste là dans phpmyadmin
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

23 nov. 2016, 19:50

Donc par exemple la requete donne :
SELECT * FROM `actu` JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1 AND regions.url = 'rhone-alpes' AND loisirs.city = 'grenoble' AND loisirs.date_debut_sortie >= '2016-11-26' AND loisirs.date_fin_sortie <= 2016-11-28
Les dates corresponde bien donc du samedi au Lundi.
J'ai mis ds ma table actu donc une annonce avec en date_debut_sortie : 2016-11-26 00:00:00 et en date_fin_sortie : 2016-11-27 00:00:00

Donc tout correspond apparament aucune erreur à l'écran ou dans PHPMYADMIN mais l'annonce ne ressort pas alors que pourtant j'ai bien vérifié la region, depatement, ville ... tout correspond

Du coup j'ai essayé avec un BETWEEN mais sans succes:
SELECT * FROM `loisirs` JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1 AND regions.url = 'rhone-alpes' AND loisirs.city = 'Grenoble' BETWEEN loisirs.date_debut_sortie >= '2016-11-26' AND loisirs.date_fin_sortie <= 2016-11-28

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 nov. 2016, 20:06

Et tu vas me dire que tu as testé ta 2ème requête dans phpmyadmin ? :non: 8-|

Pour ta 1ère requête supprime les critères un par un dans phpmyadmin et teste le résultat jusqu'à obtenir l'enregistrement que tu veux pour savoir le critère qui pose problème...
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

23 nov. 2016, 20:23

Biensur que je l'ai testé.
Il y a une erreur, apparament le BETWEEN ne peut se faire que sur la meme colonne alors que dans mon cas on est sur 2 colonne

le critére qui me pose problème est la date car tout le reste marche:
SELECT * FROM `actu` JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1 AND regions.url = 'rhone-alpes' AND loisirs.city = 'grenoble'
Cette requete ne pose aucun problème

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 nov. 2016, 00:55

le critére qui me pose problème est la date car tout le reste marche
Maintenant que tu as identifié l'endroit où il y a le problème, regarde attentivement comment tu as indiqué les dates ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

24 nov. 2016, 21:59

Donc après avoir relu ma requete

Elle est censée sélectionnée les annonces entre le 26 et le 28 ..
Supérieur ou égal au 26 et inférieur ou égal au 28

Ou je ne comprends pas ma propre requete alors.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 nov. 2016, 00:56

... AND loisirs.date_debut_sortie >= '2016-11-26' AND loisirs.date_fin_sortie <= 2016-11-28
La différence de coloration syntaxique devrait te mettre sur la voie, moi je mise sur les guillemets ;)
Quand tout le reste a échoué, lisez le mode d'emploi...