Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1901 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] [PHP/MYSQL] Problème d'exécution de requete imbriqué

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] [PHP/MYSQL] Problème d'exécution de requete imbriqué

n°1849397
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 12:42:20  profilanswer
 

Bonjour à tous.
 
Alors gros souci ce matin. J'ai deja bien galerer à faire ma requete, plusieur select imbriqué dont un COUNT.
ENfin bref au final dans PHPMYADMIN ma requete fonctionne parfaitement j'obtien bien les resulat que je désire.
 
ALors je l'a met en application dans mon code et la evidement sa marche pas et c'est pour cela que je demande un petit coup de pouce. Au depart j'ai essayé avec mes classe et méthode propre à l'application( collection d'objet en ressortant une liste d'id qui me fait une instanciation d'objet à la volet)
Mais le souci vient d'est l'exécution de la requete donc j'ai essayé etape par etape et cela ne fonctionne pas petit coup de main please
 
Alors la requete sous MYSQL

Code :
  1. SELECT codeCommune
  2. FROM communes t1
  3. WHERE (
  4. SELECT COUNT( * )
  5. FROM evenements t2
  6. WHERE t2.evt_soiree_id = '5'
  7. AND t1.codeCommune = t2.evt_codecom
  8. AND t2.evt_statut =0
  9. ) =0
  10. AND EXISTS (
  11. SELECT NULL
  12. FROM evenements t2
  13. WHERE evt_soiree_id = '5'
  14. AND t1.codeCommune = t2.evt_codecom
  15. )
  16. LIMIT 0 , 30


 
avec php
 

Code :
  1. $requete = "SELECT codeCommune FROM communes t1 WHERE(";
  2.    $requete .="SELECT COUNT (*)  FROM evenements t2, t1 WHERE t2.evt_soiree_id = '5' AND t1.codeCommune = t2.evt_codecom AND t2.evt_statut = 0 ) = 0 ";
  3.    $requete .="AND exists( SELECT null from  t2 where evt_soiree_id ='5' AND t1.codeCommune = t2.evt_codecom )";
  4.    try
  5.    {
  6.     $Mysql = new Mysql($Serveur = $SACCREconfig['dbhost'], $Bdd = $SACCREconfig['dbname'], $Identifiant = $SACCREconfig['dbuser'], $Mdp = $SACCREconfig['dbpass']);
  7.    }
  8.    catch (Erreur $e) {
  9.     echo $e -> RetourneErreur();
  10.    }
  11.    $Ressource = mysql_query($requete);
  12.    $row = mysql_fetch_row($Ressource)


 
c'est le fetch row qui coince
 

Citation :


Warning : mysql_fetch_row(): supplied argument os not a valid MySQL result ressource


 
J'ai vraiment besoin d'un gros gros coup de main :(
 
merci d'avance

Message cité 1 fois
Message édité par hyptnos le 10-02-2009 à 15:17:00
mood
Publicité
Posté le 10-02-2009 à 12:42:20  profilanswer
 

n°1849401
omega2
Posté le 10-02-2009 à 12:57:30  profilanswer
 

mysql_error ?

n°1849402
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 13:02:22  profilanswer
 

omega2 a écrit :

mysql_error ?

 


Citation :


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM evenements t2, t1 WHERE t2.evt_soiree_id = '5' AND t1.codeCommune = t2.' at line 1

 

:s

 

et je rappel que la meme requete mot pour mot syntaxe exact fonctionne dans mysql

Message cité 1 fois
Message édité par hyptnos le 10-02-2009 à 13:04:19
n°1849404
Profil sup​primé
Posté le 10-02-2009 à 13:13:22  answer
 

Mysql c'est une classe que tu as faite toi ?

n°1849405
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 13:15:45  profilanswer
 

C'est une classe d'une application maison que je reutilise a chaque elle permet la connexion a la base de donné ansi que différente methode mysql
 
mais dans notre cas la elle n'est pas utilisé la connexion est faite lors du démarrage de l'appli y a pas de souci la dessus
c'est pourquoi j'ai tester avec les methode procédural de l'age de pière
mysql_query
et  
mysql_fetch_row
 
mais sa marche pas dans php.
 
est ce que cela pourrai venir de la config serveur PHP qui ne traite pas les imbriquation par hazard ?

n°1849412
Profil sup​primé
Posté le 10-02-2009 à 13:28:53  answer
 

mysql_query ne gère pas les requêtes multiples, cf. la doc ;)

n°1849415
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 13:29:44  profilanswer
 

Solution ? pour comblé ce truc?

 

En gros c'est le count qui fait chier? car j'ai exactement le meme genre de requete (mais sans le count) en gros la meme avec le select et un not exist select imbriqué
et sa fonctionne bien dans php avec mysql_query
et la avec le select count en plus sa marche plus

 

donc une idée pour dévier le probleme ? faire en sorte que cela marche ?


Message édité par hyptnos le 10-02-2009 à 13:37:56
n°1849432
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 14:13:29  profilanswer
 

Bon sa vien pas du fait du multi select dans la requete
 
car j'ai essayé avec la methode mysqli_mutli_query
et sa marche pas pour autant
 
j'ai bien un souci d'exécution de la requete dans php mais quoi ? la reste un mystère et je suis totalement bloqué :s

n°1849438
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 14:32:58  profilanswer
 

up please j'ai vraiment besoin d'aide :(
 

n°1849439
omega2
Posté le 10-02-2009 à 14:44:01  profilanswer
 

hyptnos a écrit :

Alors la requete sous MYSQL

Code :
  1. SELECT codeCommune
  2. FROM communes t1
  3. WHERE (
  4. SELECT COUNT( * )
  5. FROM evenements t2
  6. WHERE t2.evt_soiree_id = '5'
  7. AND t1.codeCommune = t2.evt_codecom
  8. AND t2.evt_statut =0
  9. ) =0
  10. AND EXISTS (
  11. SELECT NULL
  12. FROM evenements t2
  13. WHERE evt_soiree_id = '5'
  14. AND t1.codeCommune = t2.evt_codecom
  15. )
  16. LIMIT 0 , 30


Celle là marche peut être.

hyptnos a écrit :

Citation :


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM evenements t2, t1 WHERE t2.evt_soiree_id = '5' AND t1.codeCommune = t2.' at line 1


Mais ce message d'erreur montre une requête différente ... et ton code php aussi d'ailleurs ("FROM evenements t2, t1 WHERE" <> "FROM evenements t2 WHERE" ). [:airforceone]  
 
Fait un echo de $requete avant de l'exécuter et teste ce que php va t'avoir affiché. Je suis sur qu'en la testant avec mysql, t'auras la même erreur.
 
 
luc@s > Il n'y a pas de requête multiple (multi select : plusieurs requêtes exécuté les une après les autres) ici mais des requêtes imbriqués (une requête qui contient d'autres requêtes)
Quel que soit l'extension php utilisé, requête imbriqué ou requête basique, c'est considéré comme une seule requête et c'est le serveur qui s'occupe de la gérer.
Pour les requêtes multiples par contre, c'est plus compliqué par ce qu'il faut soit découper la liste de requête pour les envoyer une par une soit rentrer dans un mode spécial qui permet l'envoie d'une série de requête. C'est pour ça qu'il faut que l'extension gère les requêtes multiples pour envoyer plusieurs requête en un appel.

mood
Publicité
Posté le 10-02-2009 à 14:44:01  profilanswer
 

n°1849441
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 14:51:09  profilanswer
 

ce sont les meme sauf que j'ai bidouiller au fur et a mesure les alias je me suis dit que php est peute tre plus stricte etc...
cela dit avant que tu le dise j'ai bien fait un echo que de ma requete (a chaque fois d'ailleur) et exécuter dans mysql
et a chaque fois sa marche
 
donc je vois vraiment pas ou est le souci
je comprend pas pourquoi php me sort une erreur de syntaxte sur la requete qui apres un copie colle fonctionne en direct dans mysql
 
et la je commence a paniqué car faut que je presente l'application vendredi matin et si j'arrive a gerer ce truc de "bippppp" je suis dans la "biippppp"

n°1849442
yellu
Posté le 10-02-2009 à 14:51:39  profilanswer
 

ta requete semble realisable avec deux jointure, un group by et un having

n°1849446
Profil sup​primé
Posté le 10-02-2009 à 14:53:58  answer
 

@omega : merci je ne voyais pas la différence ;)

n°1849447
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 14:55:04  profilanswer
 

yellu a écrit :

ta requete semble realisable avec deux jointure, un group by et un having


 
 
Sauf que je suis pas du tout expert en jointure et tout le tralala :s
si une ame charitable  se voit gentiment de proposé la réécriture de la requete de facon qu'elle soit plus simplement traitable par php je suis preneur avec ma reconnaissance eternel ^^

n°1849450
yellu
Posté le 10-02-2009 à 14:58:03  profilanswer
 

mmmh un truc de ce style n'irait pas ?  
 
SELECT t1.codeCommune
FROM communes t1
INNER JOIN evenements t2 ON t1.codeCommune = t2.evt_codecom
WHERE t2.evt_soiree_id = '5'
AND t2.evt_statut =0
GROUP BY t1.codeCommune
HAVING COUNT(*) = 0
LIMIT 0 , 30;

n°1849452
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 14:59:22  profilanswer
 

J'essai et je redis cela
cela va etre simple a verifier sachant que je n'ai pour le moment qu'une ligne retour

n°1849454
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 15:02:56  profilanswer
 

Heuuu pas d'erreur dans mysql mais il me retourne aucun resultat donc doit y avoir un petit souci
 
je comprend pas le Having par contre
car dans ma requete iniatial j'avais fait un count qui doit correspondre a 0 si le champs evt_statut etait egale a 0
 
car dans la table evt il y a plusieur ligne pour une meme commune (codeCommune) et faut regrouper ses ligne et verifier que le statut soit tous a 1
Si tous a 1 c'est ok
sinon non

n°1849456
yellu
Posté le 10-02-2009 à 15:06:33  profilanswer
 

Ca alors peut-être :
 
SELECT t1.codeCommune  
FROM communes t1  
INNER JOIN evenements t2 ON t1.codeCommune = t2.evt_codecom  
WHERE t2.evt_soiree_id = '5'  
GROUP BY t1.codeCommune  
HAVING AVG(t2.evt_statut) = 1
LIMIT 0 , 30;
 
Edit : on peut aussi prendre le MIN si un status à 0 est discriminatoire


Message édité par yellu le 10-02-2009 à 15:07:56
n°1849457
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 15:10:33  profilanswer
 

Bon cette derniere fonctionne dans mysql merci pour la simplification
je teste dans php maintenant

n°1849459
omega2
Posté le 10-02-2009 à 15:12:52  profilanswer
 

yellu a écrit :

mmmh un truc de ce style n'irait pas ?  
 
SELECT t1.codeCommune
FROM communes t1
INNER JOIN evenements t2 ON t1.codeCommune = t2.evt_codecom
WHERE t2.evt_soiree_id = '5'
AND t2.evt_statut =0
GROUP BY t1.codeCommune
HAVING COUNT(*) = 0
LIMIT 0 , 30;

L'idée est bonne mais tu peux m'expliquer un petit détail?
=> Comment on peut à la fois avoir des données dans t2 ("inner join" ) en ne retournant aucune ligne dans t2 (le count(*)=0) ?
C'est un "left outer join" qu'il faut utiliser si on veut aussi les lignes de t1 qui n'ont pas de correspondance dans t2 et il faut aussi indiquer au count(*) ce qu'il doit compter.
 
hyptnos > Un "having", c'est comme le "where" à par qu'il travaille sur les lignes de résultat et non pas sur les lignes de la/des table(s).

n°1849461
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 15:14:03  profilanswer
 

Yeahhhhhh
j'ai plus d'erreur
j'incruste ma methode de collection d'objet  
et je vous redis cela et passe le statut en resolu si cela passe
 
en tout cas merci yellu tu me sauve la vie :p

n°1849463
yellu
Posté le 10-02-2009 à 15:15:37  profilanswer
 

omega2 a écrit :

L'idée est bonne mais tu peux m'expliquer un petit détail?
=> Comment on peut à la fois avoir des données dans t2 ("inner join" ) en ne retournant aucune ligne dans t2 (le count(*)=0) ?
C'est un "left outer join" qu'il faut utiliser si on veut aussi les lignes de t1 qui n'ont pas de correspondance dans t2 et il faut aussi indiquer au count(*) ce qu'il doit compter.
 
hyptnos > Un "having", c'est comme le "where" à par qu'il travaille sur les lignes de résultat et non pas sur les lignes de la/des table(s).


 
Cette proposition était mauvaise, ma seconde est plus censée, je n'avais pas compris son besoin lors de ma première réponse

n°1849464
hyptnos
GT : Gui iom
Posté le 10-02-2009 à 15:16:25  profilanswer
 

Merci pour la définition du Having super :p
 
et tout fonctionne dans mon appli un grand grand merci a tous ceux qui m'ont apporté de l'aide.
 
Par contre pourquoi ca ne fonctionnait pas avec ma requete de depart qui fonctionnait dans mysql la sa restera un mystère.
 
je met en resolu

n°1849472
omega2
Posté le 10-02-2009 à 15:20:44  profilanswer
 

yellu a écrit :


 
Cette proposition était mauvaise, ma seconde est plus censée, je n'avais pas compris son besoin lors de ma première réponse

Idem en fait, et à la fin j'avais plusieurs messages de retard.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] [PHP/MYSQL] Problème d'exécution de requete imbriqué

 

Sujets relatifs
Comment synchroniser des tables mysql ?[PHP / MySQL] Saisie de texte et formatage
[AJAX PHP]Rediriger dossiers d'un domaine vers la page d'accueil[Resolu][Apache] Virtual Host et Alias sous Windows
probleme de control par gotoandstop sur une anim.swfoptim requete
probleme mise en page de mon site[MySQL] Requête un peu spéciale...
Plus de sujets relatifs à : [RESOLU] [PHP/MYSQL] Problème d'exécution de requete imbriqué


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR