Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/12/2012, 19h07   #1
Seta-san
Membre habitué
 
Homme Mickael
Webmaster
Inscription : avril 2007
Messages : 243
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Localisation : France

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 243
Points : 148
Points : 148
Par défaut Requete qui ne vérifie pas comme il faudrait

Bonsoir,

Je suis devant un petit problème que je ne parviens pas à résoudre.
Ma requête ne respecte pas tout à fait mes conditions :

Code :
1
2
3
4
5
6
7
8
 
mysql_query("
SELECT COUNT(*) AS test FROM book_tarifs_saison 
WHERE (
categorie = '".$categorie."' 
AND type = '".$type."' )
AND nuite LIKE '%".$date_verif_s[$s]."%'   
")OR die(mysql_error().'Impossible de vérifier les tarifs de saison');
test me retourne 1 si categorie et type sont bon mais également quand nuite ne l'ai pas.
Seta-san est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 21h51   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Donne un exemple de données, le résultat attendu et le résultat obtenu.
A priori, je trouve un peu étrange de faire un LIKE sur ce qui semble être une date.

Et inutile de donner la partie PHP. Donne seulement le SQL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 06h44   #3
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 804
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 804
Points : 3 099
Points : 3 099
salut,

comme le dit cinephil, like c'est pour du texte au départ

rassure moi, tu n'utilises pas du "or die" pour gérer une page qui sera un jour en production?
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 14h29   #4
Seta-san
Membre habitué
 
Homme Mickael
Webmaster
Inscription : avril 2007
Messages : 243
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Localisation : France

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 243
Points : 148
Points : 148
Categorie : Standard
Type : Double..
Nuite : @2012-12-12@2012-12-13@2012-12-14 (chaine de caractère)

Je lui demande de chercher dans ma table "book_tarifs_saison" si il y a d'enregistré (par exemple) une ligne correspondant à la catégorie "Standard" de type "double" et dont la date que je lui indique (2012-12-13) se trouve dans la chaine "nuité".

Il est me retourne 1, mais si je lui donne la date 2012-12-18 a chercher, il me donne quand même 1. Par contre si je change le type avec cette même date, il me sort correctement 0.
Seta-san est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 15h16   #5
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 804
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 804
Points : 3 099
Points : 3 099
c'est pas du tout la bonne approche pour les dates, y des fonctions et des opérateurs ternaires (d between b and c) ou de comparaison (<, >, etc...) pour les manipuler

une comparaison comme tu fais n'est pas viable avec en plus la référence que tu prends... tu n'as que des faux positifs...
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 15h19   #6
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 562
Points : 25 562
Envoyer un message via MSN à CinePhil
Citation:
Nuite : @2012-12-12@2012-12-13@2012-12-14 (chaine de caractère)
L'horreur !

Il faut une table des jours, voire modéliser un calendrier un peu plus complexe, et faire une table associative entre la table actuelle et la table des jours.

Citation:
Je lui demande de chercher dans ma table "book_tarifs_saison" si il y a d'enregistré (par exemple) une ligne correspondant à la catégorie "Standard" de type "double" et dont la date que je lui indique (2012-12-13) se trouve dans la chaine "nuité".

Il est me retourne 1, mais si je lui donne la date 2012-12-18 a chercher, il me donne quand même 1. Par contre si je change le type avec cette même date, il me sort correctement 0.
Je ne comprends rien à ton explication !

de toute façon, tu es mal parti avec ton modèle de données !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2012, 20h26   #7
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 804
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 804
Points : 3 099
Points : 3 099
en fait il essaye d'expliquer, sans comprendre qu'en fait c'est une erreur, que like renvoie en fait plus ou moins n'importe quoi...
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 18h46   #8
Seta-san
Membre habitué
 
Homme Mickael
Webmaster
Inscription : avril 2007
Messages : 243
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Localisation : France

Informations professionnelles :
Activité : Webmaster

Informations forums :
Inscription : avril 2007
Messages : 243
Points : 148
Points : 148
Oui c'est clair c'est bizare, mais je n'arrivai pas a obtenir ce que je voulais avec BETWEEN car je ne voulais pas qu'il m'inclus certaine date sous certaine condition, alors j'ai essayé de détourner mais c'était une mauvaise idée ^^'. J'ai réussi a faire ce que je voulais.

Je met quand même ma formule histoire de l'avoir en mémo et de clôturer le sujet. Merci pour vos liens et vos remarques.

Code :
1
2
3
4
5
6
 
SELECT * FROM book_tarifs_saison WHERE 
	categorie = '".$categorie."' 
	AND type = '".$type."' 
	AND  ('".$date_verif_s[$s]."' BETWEEN date_debut AND date_fin) 
	AND  '".$date_verif_s[$s]."' != date_fin
Seta-san est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 19h08   #9
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 804
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 804
Points : 3 099
Points : 3 099
c'est un des cas où il est particulièrement efficace de pas utiliser between:
Code sql :
1
2
3
4
5
SELECT * FROM book_tarifs_saison WHERE 
	categorie = '".$categorie."' 
	AND type = '".$type."' 
	AND  '".$date_verif_s[$s]."' >= date_debut 
	AND  '".$date_verif_s[$s]."' < date_fin
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h21.


 
 
 
 
Partenaires

Hébergement Web