Table temporaire MySQL

Signaler
Messages postés
3
Date d'inscription
lundi 8 décembre 2008
Statut
Membre
Dernière intervention
17 février 2012
-
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
-
Bonjour,

voilà j'ai un petit soucis, j'ai pour la première fois utiliser une requette avec la création d'une table temporaire.

Dans l'interface PHP MyAdmin, la requette s'effectue et j'obtient les bon résultats, mais quand je passe par PH j'ai une erreur :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

J'ai fait un echo de la variable qui contient ma requette, j'ai fait un copier/coller dans phpmyadmin est elle passe sans erreur :-/

Voilà la requette provenant de la variable php :

CREATE TEMPORARY TABLE temp SELECT devis.ID as DEVIS_ID, devis.DATE as DATE, devis.ID_CLIENT as ID_CLIENT, devis.REMARQUE as REMARQUE, devis.DEL as DEL, SUM(postes.QUANTITE * postes.PRIX_UNITAIRE) as MONTANT FROM ABC_devis AS devis, ABC_devis_postes AS postes WHERE devis.ID postes.ID_DEVIS GROUP BY DEVIS_ID ;SELECT * FROM temp WHERE DEVIS_ID '3' AND DEL = 0 ORDER BY DEVIS_ID

D'avance merci de vous pencher sur mon problème ;)

4 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

mysql_fetch_array() sert à récupérer une ligne de résultat mysql. Avec un peu de logique tu aurais pu te douter qu'une création de table ne retourne pas de résultat. Maintenant, si tu avais regardé la documentation de mysql_query(), tu aurais remarqué que dans le cas d'un CREATE (ou autre requête de ce genre), elle ne retourne pas une ressource mysql suceptible d'être manipulée par mysql_fetch_array et ses congénères mais un simple bool.

Bref, tout ça pour dire que ton problème n'est pas la création de la table mais ta logique. J'ajouterais également que lorsque l'on a besoin de créer ce genre de tables temporaires, dans 90% des cas c'est que l'on à commis une très grosse erreur de conception dans l'application, tu devrais revoir tout ça.
Messages postés
3
Date d'inscription
lundi 8 décembre 2008
Statut
Membre
Dernière intervention
17 février 2012

Salut,

merci de te pencher sur le souci, je te prétend certainement pas avoir une logique sans failles ^^

Donc si je comprend bien, le SELECT après le ; ne retourne pas les données demandées?

En faite pour simplifier, j'ai une table contenant les produits de la facture avec comme lien juste l'id de cette facture, donc quand je veux faire la liste, dans une page php, de mes factures, je dois faire le tour de ma table factures et de la faire le tour de ma table produits, alors bien sur avec 2 while imbriqué je peux faire cela, mais j'airais bien voulu faire en une requete pour y ajouter des WHERE d'un formulaire.

je ne sais pas si tu me suis, mais tout conseil est bon à prendre.

Merci pour tes infos ;)
Messages postés
3
Date d'inscription
lundi 8 décembre 2008
Statut
Membre
Dernière intervention
17 février 2012

Merci pour les conseil, j'ai contourner le problème directement depuis le PHP :-/

Sinon si tu as le temps de me donner mon ou mes erreur sur cette requête

SELECT *, SUM(postes.QUANTITE * postes.PRIX_UNITAIRE) as SOMME FROM ABC_devis AS devis
INNER JOIN ABC_devis_postes AS postes ON ID_DEVIS=devis.ID
WHERE SOMME > 200
GROUP BY devis.ID

Sachant qu'il me retourne comme erreur qu'il ne connait pas SOMME

Si tu as une alternative à cette requête.

Encore merci
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Donc si je comprend bien, le SELECT après le ; ne retourne pas les données demandées?

Relis bien la documentation de mysql_query() : cette fonction exécute une seule requete SQL. Or, avec ton point-virgule, tu met plusieurs requêtes SQL, il n'y a donc aucune raison pour que cette seconde requête soit effectuée.

Sinon si tu as le temps de me donner mon ou mes erreur sur cette requête

Ta requête comporte deux erreurs :
- Dans le cas présent tu ne dois pas utiliser WHERE mais HAVING.
- Le HAVING doit être effectué après le GROUP BY et non avant.