Problème d'exécution de requete imbriqué [RESOLU] [PHP/MYSQL] - PHP - Programmation
Marsh Posté le 10-02-2009 à 13:02:22
omega2 a écrit : mysql_error ? |
Citation :
|
:s
et je rappel que la meme requete mot pour mot syntaxe exact fonctionne dans mysql
Marsh Posté le 10-02-2009 à 13:15:45
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 ?
Marsh Posté le 10-02-2009 à 13:28:53
mysql_query ne gère pas les requêtes multiples, cf. la doc
Marsh Posté le 10-02-2009 à 13:29:44
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 ?
Marsh Posté le 10-02-2009 à 14:13:29
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
Marsh Posté le 10-02-2009 à 14:44:01
hyptnos a écrit : Alors la requete sous MYSQL
|
Celle là marche peut être.
hyptnos a écrit :
|
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" ).
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.
Marsh Posté le 10-02-2009 à 14:51:09
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"
Marsh Posté le 10-02-2009 à 14:51:39
ReplyMarsh Posté le 10-02-2009 à 14:55:04
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 ^^
Marsh Posté le 10-02-2009 à 14:58:03
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;
Marsh Posté le 10-02-2009 à 14:59:22
J'essai et je redis cela
cela va etre simple a verifier sachant que je n'ai pour le moment qu'une ligne retour
Marsh Posté le 10-02-2009 à 15:02:56
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
Marsh Posté le 10-02-2009 à 15:06:33
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
Marsh Posté le 10-02-2009 à 15:10:33
Bon cette derniere fonctionne dans mysql merci pour la simplification
je teste dans php maintenant
Marsh Posté le 10-02-2009 à 15:12:52
yellu a écrit : mmmh un truc de ce style n'irait pas ? |
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).
Marsh Posté le 10-02-2009 à 15:14:03
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
Marsh Posté le 10-02-2009 à 15:15:37
omega2 a écrit : L'idée est bonne mais tu peux m'expliquer un petit détail? |
Cette proposition était mauvaise, ma seconde est plus censée, je n'avais pas compris son besoin lors de ma première réponse
Marsh Posté le 10-02-2009 à 15:16:25
Merci pour la définition du Having super
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
Marsh Posté le 10-02-2009 à 15:20:44
yellu a écrit : |
Idem en fait, et à la fin j'avais plusieurs messages de retard.
Marsh Posté le 10-02-2009 à 12:42:20
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
avec php
c'est le fetch row qui coince
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 édité par hyptnos le 10-02-2009 à 15:17:00