Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/01/2011, 11h14   #1
Invité régulier
 
Inscription : mai 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 33
Points : 8
Points : 8
Par défaut SUBSTRING ou LEFT fonctionnent dans MySQL, pas dans PHP !?

Salut

Quand j’exécute cette requete sous MySQL ça fonctionne parfaitement en me renvoyant le bon résultat ('04-02') :
Code :
1
2
3
4
5
6
7
8
SELECT id_res
FROM resultats
WHERE nom_res = 'des plaques de pellicules blanches'
AND LEFT(id_res, 2) = (
  SELECT id_res
  FROM resultats
  WHERE nom_res = 'Peau sensible et déshydratée' )
AND nom_diag = 'Diagnostic peau'
ou, similaire, en remplaçant LEFT(id_res, 2) par SUBSTRING(id_res, 1, 2 )

Pourtant, quand je l’exécute en PHP, même si ça ne me génère pas de code d'erreur, ça ne me renvoie pas pour autant le résultat que j'obtiens ds MySQL ??? Alors que mes autres requêtes fonctionne parfaitement...
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
$requete_sql = 
"SELECT id_res
FROM resultats
WHERE nom_res = 'des plaques de pellicules blanches'
AND SUBSTRING(id_res, 1, 2 ) = (
  SELECT id_res
  FROM resultats
  WHERE nom_res = 'Peau sensible et déshydratée' )
AND nom_diag = 'Diagnostic peau'";
 
$resultat_sql = mysql_query($requete_sql) OR die ("la requete SQL xxxx a FAIL ! <br />Erreur : ".mysql_error());//execute la requete et sauvegarde le resultat
 
$nb_produits_associé = mysql_num_rows($resultat_sql);
dans PHP
Code php :
mysql_num_rows($resultat_sql)
me renvoie 0

merci d'avance
robin des bulles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 11h22   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

Votre problème est lié à votre applicatif vous avez peu de chance de trouver une réponse ici.

Ceci-dit votre requete est problématique je penses.

En effet votre sous-requête est susceptible de retourner plusieurs résultats car votre test ce fait sur un libellé.

Du coup je changerai le = en un IN pour éviter ce plantage futur (ou passez par un exists)

Code sql :
1
2
3
4
5
6
7
8
9
 
SELECT id_res
FROM resultats
WHERE nom_res = 'des plaques de pellicules blanches'
AND LEFT(id_res, 2) IN (
  SELECT id_res
  FROM resultats
  WHERE nom_res = 'Peau sensible et déshydratée' )
AND nom_diag = 'Diagnostic peau'
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 11h28   #3
Invité régulier
 
Inscription : mai 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 33
Points : 8
Points : 8
Merci

Tu crois qu'il faut que je remonte d'un niveau mon sujet ?

et pour le IN a la place du = , vu que cette partie de la BD ne sera modifié que rarement et donc manuellement, ce n'est pas la peine
robin des bulles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 11h55   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Je trouve bizarre d'aller comparer un id_res à une partie d'un autre id_res, surtout dans la mesure où cet identifiant devrait être de type entier.

Que donne une requête simple, par exemple si tu commentes tout le premier AND du WHERE, à la place de celle-ci ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 12h34   #5
Invité régulier
 
Inscription : mai 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 33
Points : 8
Points : 8
En fait id_res (de la table résultat) est une chaîne, car des résultats ont aussi des sous résultats, donc id_res est un id hiérarchique incrémenté (je sais plus le nom exact que ça a)
Structure de resultat :
Citation:
id_res
nom_res
libelle_res
description_res
logo_res
#nom_diag
extrait des données :
Citation:
01 Peau normale à mixte
01-01 des tiraillements
01-02 des plaques de pellicules blanches
01-03 une peau rugueuse et granuleus
02 Peau grasse
02-01 des tiraillements
etc
et donc
Code :
1
2
3
4
SELECT id_res
FROM resultats
WHERE nom_res = 'des plaques de pellicules blanches'
AND nom_diag = 'Diagnostic peau'
me renvoie :
Citation:
id_res
01-02
02-02
03-02
04-02
05-02
Mais vu que ma requete fonctionne sous MySQL je ne pense pas que ça vienne de la requete en elle même, on dirait juste que le fait qu'il y ait un LEFT ou SUBSTRING, php me renvoie rien... :/

et merci pour le déplacement
robin des bulles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 13h42   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Qu'est sensée faire ta requête ?

Petit jeu de données et résultat attendu aiderait à comprendre.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 14h22   #7
Invité régulier
 
Inscription : mai 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 33
Points : 8
Points : 8
Ah! Ahahah! j'ai ciblé l'erreur, en fait ca vient des accents
(pourtant mon fichier est en utf8 et ma DB aussi !)

me reste plus qu'a trouvé comment l'envoyé en conservant l'utf8 ou au moin les accents...
robin des bulles est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h42.


 
 
 
 
Partenaires

Hébergement Web