Requete qui ne retourne pas la date entourant
Résolu/Fermé
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
-
26 mars 2014 à 16:26
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 27 mars 2014 à 12:54
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 27 mars 2014 à 12:54
A voir également:
- Requete qui ne retourne pas la date entourant
- Ecran retourne - Guide
- Mfg date - Forum PC portable
- Jm date désabonnement ✓ - Forum Consommation & Internet
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
11 réponses
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
26 mars 2014 à 16:38
26 mars 2014 à 16:38
Bonjour,
J ai testé avec les parenthèse ça ne change rien, ça retourne le même résultat avec ou sans
J ai testé avec les parenthèse ça ne change rien, ça retourne le même résultat avec ou sans
Utilisateur anonyme
26 mars 2014 à 16:40
26 mars 2014 à 16:40
Rebonjour
Regarde cette condition :
Idem pour ta seconde condition
Et dans celle-ci :
Enfin, pour alléger l'écriture, utilise plutôt BETWEEN
Regarde cette condition :
date_deb_event <= '$datedebstr'Tu as deux fois $datedebstr, je suppose que c'est involontaire.
AND date_fin_event >= '$datedebstr'
Idem pour ta seconde condition
Et dans celle-ci :
date_deb_event < '$datedebstr'Tu n'aurais pas inversé début et fin ?
AND date_fin_event > '$datefinstr'
Enfin, pour alléger l'écriture, utilise plutôt BETWEEN
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
26 mars 2014 à 16:46
26 mars 2014 à 16:46
pour la première et deuxième condition non c'est normal
le but est de prendre les dates situées des activités qui commencent soit pendant le mois soit qui finisse pendant
J'aurais pu faire faire date_deb_event <= '$datedebstr' <= date_fin_event
mais je ne sais pas si ça marche vu que je n'ai pas testé... et ça supprimerais juste le and si ça marche
Pour la dernière même en inversant ça ne retourne rien... :'(
le but est de prendre les dates situées des activités qui commencent soit pendant le mois soit qui finisse pendant
J'aurais pu faire faire date_deb_event <= '$datedebstr' <= date_fin_event
mais je ne sais pas si ça marche vu que je n'ai pas testé... et ça supprimerais juste le and si ça marche
Pour la dernière même en inversant ça ne retourne rien... :'(
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
26 mars 2014 à 17:19
26 mars 2014 à 17:19
la dernière doit me retourné les activités qui comment avant le mois de ma recherche et qui finissent après.
Pour être plus préçis. Je fais une recherche sur un mois donc le début du mois c'est le 01 du mois de l'année ->01/03/2014 par exemple
la fin ça donne 31/03/2014 pour le même exemple
La dernière condition qui étais la suivante
OR date_deb_event > '$datedebstr'
AND date_fin_event < '$datefinstr'
devait me permettre de retourné une date qui ferais 01/02/2014 au 01/04/2014 à titre d'exemple. Mais ça ne retourne rien...
Pour être plus préçis. Je fais une recherche sur un mois donc le début du mois c'est le 01 du mois de l'année ->01/03/2014 par exemple
la fin ça donne 31/03/2014 pour le même exemple
La dernière condition qui étais la suivante
OR date_deb_event > '$datedebstr'
AND date_fin_event < '$datefinstr'
devait me permettre de retourné une date qui ferais 01/02/2014 au 01/04/2014 à titre d'exemple. Mais ça ne retourne rien...
Utilisateur anonyme
26 mars 2014 à 16:56
26 mars 2014 à 16:56
As-tu testé l'erreur éventuellement retournée par ta requête ?
As-tu affichée ta requête réelle après remplacement des variables par leurs valeurs ?
Si j'en crois ton script sur l'autre post, tu aurais plutôt dû utiliser les dates sous la forme aaaa-mm-jj, c'est à dire $datedeb, $datefin, etc. et non pas $datedebstr, $datefinstr
As-tu affichée ta requête réelle après remplacement des variables par leurs valeurs ?
Si j'en crois ton script sur l'autre post, tu aurais plutôt dû utiliser les dates sous la forme aaaa-mm-jj, c'est à dire $datedeb, $datefin, etc. et non pas $datedebstr, $datefinstr
sipherion
Messages postés
1809
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016
285
26 mars 2014 à 16:57
26 mars 2014 à 16:57
Et histoire d'être sûr, contentes toi de faire des tests sur une seule condition
WHERE date_deb_event <= '$datedebstr' AND date_fin_event >= '$datedebstr'
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
26 mars 2014 à 17:06
26 mars 2014 à 17:06
les dates sont toutes en valeur de seconde par exemple 1396216800 pour le 2014-3-31
Pour ce qui est des test j ai tester mes 4 paramètres de manière individuel. Les 3 premier retourne ce qu'ils doivent c'est à dire dans l'ordre:
si l'activité commence pendant le mois:
WHERE (date_deb_event <= '$datedebstr'
AND date_fin_event >= '$datedebstr')
Si l'activité fini pendant le mois:
OR (date_deb_event < '$datefinstr'
AND date_fin_event > '$datefinstr')
si l'activité commence et se fini dans le mois :
OR (date_deb_event >= '$datedebstr'
AND date_fin_event <= '$datefinstr')
et la dernière devrait me retourné l'activité si elle commence avant le mois et de se fini après, mais la le dernier point ne me retourne rien même en solo. Et je ne trouve pas comment allez cibler ce que je veux...
Pour ce qui est des test j ai tester mes 4 paramètres de manière individuel. Les 3 premier retourne ce qu'ils doivent c'est à dire dans l'ordre:
si l'activité commence pendant le mois:
WHERE (date_deb_event <= '$datedebstr'
AND date_fin_event >= '$datedebstr')
Si l'activité fini pendant le mois:
OR (date_deb_event < '$datefinstr'
AND date_fin_event > '$datefinstr')
si l'activité commence et se fini dans le mois :
OR (date_deb_event >= '$datedebstr'
AND date_fin_event <= '$datefinstr')
et la dernière devrait me retourné l'activité si elle commence avant le mois et de se fini après, mais la le dernier point ne me retourne rien même en solo. Et je ne trouve pas comment allez cibler ce que je veux...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
26 mars 2014 à 17:16
26 mars 2014 à 17:16
Attention, il ne faut pas passer de valeur en secondes, mais sous forme aaa-mm-jj.
MySQL interprète 1396216800 comme 1396-21-68 00h
MySQL interprète 1396216800 comme 1396-21-68 00h
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
26 mars 2014 à 17:23
26 mars 2014 à 17:23
Se sont des int
Utilisateur anonyme
Modifié par le père. le 26/03/2014 à 17:30
Modifié par le père. le 26/03/2014 à 17:30
Je répère la question : as-tu affiché ta requête réelle après remplacement des variables par leurs valeurs ? (avec un simple echo)
Et Quand tu l'auras fait, peux-tu donner les valeurs date_deb_event et date_fin_event de ta table qui, d'après toi, auraient dû sortir ?
Et Quand tu l'auras fait, peux-tu donner les valeurs date_deb_event et date_fin_event de ta table qui, d'après toi, auraient dû sortir ?
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
26 mars 2014 à 17:35
26 mars 2014 à 17:35
vu que les date_deb_event et date_fin_event sont les noms de table je ne peux pas les remplacer par des valeurs sauf sur le cas que ça devrait me retourné:
date_deb_devent = 1396389600 et date_fin_event = 1398808800
date_deb_devent = 1396389600 et date_fin_event = 1398808800
Oui mais avec quelle requête ? tu peux bien faire un 'echo' de ta requête telle qu'elle est : PHP remplacera les variables par leurs valeurs. Tu ne vois pas ce que je veux dire ?
Tu as par exemple
$requete= "SELECT * FROM... WHERE (date_deb_event >= '$datedebstr'
AND date_fin_event <= '$datefinstr')";
Tu fais echo $requete; pour voir quelle est la vraie requête exécutée.
Tu as par exemple
$requete= "SELECT * FROM... WHERE (date_deb_event >= '$datedebstr'
AND date_fin_event <= '$datefinstr')";
Tu fais echo $requete; pour voir quelle est la vraie requête exécutée.
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
Modifié par Marlocq le 27/03/2014 à 09:57
Modifié par Marlocq le 27/03/2014 à 09:57
SELECT p1.date_deb_event, p1.date_fin_event, p1.description, p1.titre_event FROM calendevent p1 WHERE date_deb_event <= '1393628400' AND date_fin_event >= '1393628400' OR date_deb_event < '1396216800' AND date_fin_event > '1396216800' OR date_deb_event >= '1393628400' AND date_fin_event <= '1396216800' OR date_deb_event < '1393628400' AND date_fin_event > '1396216800' ORDER BY date_fin_event DESC
Voila
Voila
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
27 mars 2014 à 10:25
27 mars 2014 à 10:25
Bonjour,
J'ai l'impression que tu mets trop de contraintes.
Pour moi il n'y a que deux cas possibles.
Tu as un intervalle de recherche [rd;rf]
- Soit la date de début de l'événement est antérieur à rd, dans ce cas l'événement est sélectionné ssi sa date de fin est postérieure à rd ;
- Soit la date de début de l'événement est postérieure à rd, dans ce cas l'événement est sélectionné ssi sa date de début est antérieure à rf.
Du coup ta requête devient :
En simplifiant ta requête, je pense que les erreurs éventuelles seront plus simples à retracer.
J'ai l'impression que tu mets trop de contraintes.
Pour moi il n'y a que deux cas possibles.
Tu as un intervalle de recherche [rd;rf]
- Soit la date de début de l'événement est antérieur à rd, dans ce cas l'événement est sélectionné ssi sa date de fin est postérieure à rd ;
- Soit la date de début de l'événement est postérieure à rd, dans ce cas l'événement est sélectionné ssi sa date de début est antérieure à rf.
Du coup ta requête devient :
SELECT p1.date_deb_event, p1.date_fin_event, p1.description, p1.titre_event FROM calendevent p1 WHERE date_deb_event <= '$datedebstr' AND date_fin_event >= '$datedebstr' OR date_deb_event >= '$datedebstr' AND date_deb_event <= '$datefinstr' ORDER BY date_fin_event DESC
En simplifiant ta requête, je pense que les erreurs éventuelles seront plus simples à retracer.
Utilisateur anonyme
Modifié par le père. le 27/03/2014 à 10:39
Modifié par le père. le 27/03/2014 à 10:39
Il est normal que cette requête ne retourne pas la ligne date_deb_devent = 1396389600 et date_fin_event = 1398808800 car :
La première condition n'est pas satisfaite à cause de date_deb_event <= '1393628400'
La seconde condition n'est pas satisfaite à cause de date_deb_event < '1396216800'
La troisième condition n'est pas satisfaite à cause de date_fin_event <= '1396216800'
et la quatrième n'est pas satisfaite à cause de date_deb_event < '1393628400'
As-tu un autre exemple ? Car pour l'instant je ne vois pas de problème
Dans un premier temps, suis le conseil de sipherion et fais ton test avec une condition plus simple que tu vérifieras plus facilement.
La première condition n'est pas satisfaite à cause de date_deb_event <= '1393628400'
La seconde condition n'est pas satisfaite à cause de date_deb_event < '1396216800'
La troisième condition n'est pas satisfaite à cause de date_fin_event <= '1396216800'
et la quatrième n'est pas satisfaite à cause de date_deb_event < '1393628400'
As-tu un autre exemple ? Car pour l'instant je ne vois pas de problème
Dans un premier temps, suis le conseil de sipherion et fais ton test avec une condition plus simple que tu vérifieras plus facilement.
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
27 mars 2014 à 11:04
27 mars 2014 à 11:04
Pour répondre à le père, j ai testé toute une par une pour voir ce que ça retournais et juste la dernière ou je ne trouve pas de solution pour le moment.
Pour reivax ta solution me permet de récupéré celle qui comment avant finissent pendant celle qui comment pendant et finisse après et enfin celle qui sont dans le mois. Donc il me manque toujours les activités qui englobe mon mois de recherche.
Sinon pour faire mon code j'ai travaillé comme suite:
4 cas figure :
1 commence avant fini pendant
2 commence pendant fini après
3 commence et se termine pendant
4 commence avant et fini après (donc englobe)
une fois ça fait j ai fait un tableau en partant d'une recherche sur mars
Fevrier | Mars | Avril
avant | pendant |
| pendant | après
| dedans |
avant | | après
d'où les 4 contraintes
ce qui me fait en code ce que vous avez vu
SELECT p1.date_deb_event, p1.date_fin_event, p1.description, p1.titre_event
FROM calendevent p1
WHERE date_deb_event <= '$datedebstr'
AND date_fin_event >= '$datedebstr' en 1
OR date_deb_event < '$datefinstr'
AND date_fin_event > '$datefinstr' en 2
OR date_deb_event >= '$datedebstr'
AND date_fin_event <= '$datefinstr' en 3
OR date_deb_event < '$datedebstr'
AND date_fin_event > '$datefinstr' en 4 mais ça ne va pas...
Pour reivax ta solution me permet de récupéré celle qui comment avant finissent pendant celle qui comment pendant et finisse après et enfin celle qui sont dans le mois. Donc il me manque toujours les activités qui englobe mon mois de recherche.
Sinon pour faire mon code j'ai travaillé comme suite:
4 cas figure :
1 commence avant fini pendant
2 commence pendant fini après
3 commence et se termine pendant
4 commence avant et fini après (donc englobe)
une fois ça fait j ai fait un tableau en partant d'une recherche sur mars
Fevrier | Mars | Avril
avant | pendant |
| pendant | après
| dedans |
avant | | après
d'où les 4 contraintes
ce qui me fait en code ce que vous avez vu
SELECT p1.date_deb_event, p1.date_fin_event, p1.description, p1.titre_event
FROM calendevent p1
WHERE date_deb_event <= '$datedebstr'
AND date_fin_event >= '$datedebstr' en 1
OR date_deb_event < '$datefinstr'
AND date_fin_event > '$datefinstr' en 2
OR date_deb_event >= '$datedebstr'
AND date_fin_event <= '$datefinstr' en 3
OR date_deb_event < '$datedebstr'
AND date_fin_event > '$datefinstr' en 4 mais ça ne va pas...
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 27/03/2014 à 12:57
Modifié par Reivax962 le 27/03/2014 à 12:57
Faux.
Si elles englobent le mois de recherche, alors
Je réaffirme que deux contraintes suffisent, en mettre plus complexifie le code, ce qui augmente les risques de bug.
(Attention, ce n'est vrai qu'en partant du principe que les dates de fin sont postérieures aux dates de début...)
Si elles englobent le mois de recherche, alors
date_deb_event <= '$datedebstr' AND date_fin_event >= '$datedebstr'est validé.
Je réaffirme que deux contraintes suffisent, en mettre plus complexifie le code, ce qui augmente les risques de bug.
(Attention, ce n'est vrai qu'en partant du principe que les dates de fin sont postérieures aux dates de début...)
Utilisateur anonyme
Modifié par le père. le 27/03/2014 à 11:32
Modifié par le père. le 27/03/2014 à 11:32
Dans l''exemple que tu donnes, tu fais une recherche sur le mois de mars. Or, la ligne de ta base qui devrait sortir d'après toi concerne la période du 2 au 30 avril. C'est normal qu'elle ne sorte pas, puisqu'elle est entièrement après la période de recherche.
Peux-tu nous donner un VRAI exemple de valeurs de début et de fin de la période de recherche, et les date_deb_event et date_fin_event qui devraient sortir ?
Car à mon avis, tout est correct, il n'y a tout simplement pas de réponse.
Peux-tu nous donner un VRAI exemple de valeurs de début et de fin de la période de recherche, et les date_deb_event et date_fin_event qui devraient sortir ?
Car à mon avis, tout est correct, il n'y a tout simplement pas de réponse.
Marlocq
Messages postés
117
Date d'inscription
mardi 19 novembre 2013
Statut
Membre
Dernière intervention
10 septembre 2023
27 mars 2014 à 11:59
27 mars 2014 à 11:59
2014-3-1--1393628400-- 2014-3-31--1396216800--
SELECT p1.date_deb_event, p1.date_fin_event, p1.description, p1.titre_event FROM calendevent p1 WHERE date_deb_event <= '1393628400' AND date_fin_event >= '1393628400' OR date_deb_event >= '1393628400' AND date_deb_event <= '1396216800' ORDER BY date_fin_event DESC
Retester avec la commande de Reivax et ça marche enfin... Maintenant je vais analyser ça pour voir pourquoi ça commande recoupe les 4 cas.
Merci à tous pour votre aide, sans vous je pense que sans vous je serais encore dessus
SELECT p1.date_deb_event, p1.date_fin_event, p1.description, p1.titre_event FROM calendevent p1 WHERE date_deb_event <= '1393628400' AND date_fin_event >= '1393628400' OR date_deb_event >= '1393628400' AND date_deb_event <= '1396216800' ORDER BY date_fin_event DESC
Retester avec la commande de Reivax et ça marche enfin... Maintenant je vais analyser ça pour voir pourquoi ça commande recoupe les 4 cas.
Merci à tous pour votre aide, sans vous je pense que sans vous je serais encore dessus
sipherion
Messages postés
1809
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
19 décembre 2016
285
Modifié par sipherion le 26/03/2014 à 16:30
Modifié par sipherion le 26/03/2014 à 16:30
Bonjour,
Il te faut des parenthèses pour que SQL distingue tes OR et tes AND.
"Il vaut mieux savoir tout chercher que chercher à tout savoir."
"Internet est en fait l'acronyme de : Imprévisible Noctambule Transportant un Ensemble de Ragots et de Nouvelles Eminemment Triviales"
Il te faut des parenthèses pour que SQL distingue tes OR et tes AND.
WHERE (date_deb_event <= '$datedebstr'
AND date_fin_event >= '$datedebstr')
OR (date_deb_event < '$datefinstr'
AND date_fin_event > '$datefinstr')
OR (date_deb_event >= '$datedebstr'
AND date_fin_event <= '$datefinstr')
OR (date_deb_event < '$datedebstr'
AND date_fin_event > '$datefinstr')
"Il vaut mieux savoir tout chercher que chercher à tout savoir."
"Internet est en fait l'acronyme de : Imprévisible Noctambule Transportant un Ensemble de Ragots et de Nouvelles Eminemment Triviales"