SQL Utiliser résultat requete dans une autre
Fermé
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
-
24 juil. 2008 à 15:52
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 29 juil. 2008 à 17:40
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 29 juil. 2008 à 17:40
A voir également:
- Utiliser le resultat d'une requete dans une autre requete sql
- Utiliser chromecast - Guide
- Utiliser une tablette comme ecran pc - Guide
- Resultat foot - Télécharger - Vie quotidienne
- Lexer resultat - Télécharger - Sport
- Utiliser iphone comme webcam - Guide
16 réponses
biguiz
Messages postés
201
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
6 novembre 2009
35
24 juil. 2008 à 16:00
24 juil. 2008 à 16:00
Salut,
Déjà moi je ne mettrais pas de parenthèses dans la requête entre $rep :
$requete2 = "select id, count(*) from $rep group by id";
A la limite tu peux essayer ceci :
$requete2 = "select id, count(*) from ".$rep." group by id";
Déjà moi je ne mettrais pas de parenthèses dans la requête entre $rep :
$requete2 = "select id, count(*) from $rep group by id";
A la limite tu peux essayer ceci :
$requete2 = "select id, count(*) from ".$rep." group by id";
cameleon33
Messages postés
635
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
26 février 2010
50
24 juil. 2008 à 15:57
24 juil. 2008 à 15:57
Bonjour,
Normalement tu peux insérer ta variable précédente dans une chaîne de caractères avec la concaténation :
$requete2 = "select id, count(*) from " . $rep . " group by id";
Il faut que ta variable ne contienne qu'une seule valeur par contre... si le résultat de ta requête contient plusieurs valeurs il doit falloir les stocker dans un tableau et faire une boucle...
Normalement tu peux insérer ta variable précédente dans une chaîne de caractères avec la concaténation :
$requete2 = "select id, count(*) from " . $rep . " group by id";
Il faut que ta variable ne contienne qu'une seule valeur par contre... si le résultat de ta requête contient plusieurs valeurs il doit falloir les stocker dans un tableau et faire une boucle...
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
24 juil. 2008 à 16:03
24 juil. 2008 à 16:03
Salut cameleon33,
merci de me repondre,
Pour la concaténation, je connaissais, il est même possible de faire directement
que je trouve plus lisible, qu'en penses-tu ?
Mais effectivement ma réponse contient bien plus d'une ligne. Ce que je vourdrais c'est mysql considère ce résultat comme si c'était une table en elle même, comme si on avait fait
Je ne sais pas si la solution des tableaux est la plus optimisée car le retour contient non seulement plusieurs lignes mais aussi quatre ou cinq colonnes.
merci de me repondre,
Pour la concaténation, je connaissais, il est même possible de faire directement
$requete2 = "select id, count(*) from $rep group by id";
que je trouve plus lisible, qu'en penses-tu ?
Mais effectivement ma réponse contient bien plus d'une ligne. Ce que je vourdrais c'est mysql considère ce résultat comme si c'était une table en elle même, comme si on avait fait
$requete2 = "select id, count(*) from (table1) group by id";
Je ne sais pas si la solution des tableaux est la plus optimisée car le retour contient non seulement plusieurs lignes mais aussi quatre ou cinq colonnes.
cameleon33
Messages postés
635
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
26 février 2010
50
24 juil. 2008 à 16:05
24 juil. 2008 à 16:05
Ah d'accord, je vois ce que tu veux faire..
Malheureusement, ça dépasse largement mon niveau en PHP/Mysql... enfin je pense.
Peut-être que quelqu'un d'autre pourra t'aider plus efficacement que moi :p
Bon courage!
Malheureusement, ça dépasse largement mon niveau en PHP/Mysql... enfin je pense.
Peut-être que quelqu'un d'autre pourra t'aider plus efficacement que moi :p
Bon courage!
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
24 juil. 2008 à 16:07
24 juil. 2008 à 16:07
merci quand même !
A+
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
25 juil. 2008 à 09:48
25 juil. 2008 à 09:48
Personne n'a une idée ??
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
28 juil. 2008 à 09:17
28 juil. 2008 à 09:17
uuuuuup !! Need help !!
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
28 juil. 2008 à 15:16
28 juil. 2008 à 15:16
uuuuuuuppp
Sérieux personne n'aurait une idée pour m'aider à résoudre ce problème ??
Sérieux personne n'aurait une idée pour m'aider à résoudre ce problème ??
cameleon33
Messages postés
635
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
26 février 2010
50
28 juil. 2008 à 15:25
28 juil. 2008 à 15:25
Quel est le type du résultat de ta requête?
Parceque en Access, je sais que c'est un tableau particulier et que tu peux te déplacer dedans... (c'est un recordset qu'on utilise)
En php, il me semble qu'on peut aussi naviguer dans les résultats... non?
Je vais aller chercher un peu
EDIT : Sur le site du zéro : https://openclassrooms.com/fr/courses#ss_part_2
Il parle du fait que le résultat de la requête est un tableau, il explique comment naviguer dedans.. Ce n'est pas exploitable pour ce que tu veux faire?
Parceque en Access, je sais que c'est un tableau particulier et que tu peux te déplacer dedans... (c'est un recordset qu'on utilise)
En php, il me semble qu'on peut aussi naviguer dans les résultats... non?
Je vais aller chercher un peu
EDIT : Sur le site du zéro : https://openclassrooms.com/fr/courses#ss_part_2
Il parle du fait que le résultat de la requête est un tableau, il explique comment naviguer dedans.. Ce n'est pas exploitable pour ce que tu veux faire?
et pourquoi ne pas écrire directement:
$requete2 = "select id, count(*) from select blablabla from blablabla group by id";
$requete2 = "select id2, count(*) from select blablabla from blablabla group by id2";
aux parenthèses près
$requete2 = "select id, count(*) from select blablabla from blablabla group by id";
$requete2 = "select id2, count(*) from select blablabla from blablabla group by id2";
aux parenthèses près
cameleon33
Messages postés
635
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
26 février 2010
50
29 juil. 2008 à 08:07
29 juil. 2008 à 08:07
Ahhh c'est vrai qu'on peut faire des requêtes imbriquées en SQL... Ca doit marcher... Faut vérifier la synthaxe mais sinon ça doit marcher.
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
29 juil. 2008 à 10:12
29 juil. 2008 à 10:12
Merci beaucoup pour votre aide les gars mais vous n'avez pas bien compris ce que je souhaite faire visiblement.
algoplus, ta solution marcherait parfaitement à l'exception près que dans ton exemple :
la requête "select blablabla from blabla" sera exécutée DEUX fois !! Et c'est justement ce que je ne veux pas ! Cette requête met un certain temps à s'exécuter et mon but n'est donc pas de l'exécuter deux fois alors que je pense qu'il y une solution pour utiliser le résultat qu'elle retourne.
cameleon33, merci pour le lien sur le sdz mais ce tuto n'explique pas ce genre de cas. Il explique simplement comment exploiter le résultat d'une requête en php mais pas comment le réutiliser dans une seconde requête !
J'espère m'être mieux expliqué sur mon problème.
A+
algoplus, ta solution marcherait parfaitement à l'exception près que dans ton exemple :
$requete2 = "select id, count(*) from select blablabla from blablabla group by id"; $requete2 = "select id2, count(*) from select blablabla from blablabla group by id2";
la requête "select blablabla from blabla" sera exécutée DEUX fois !! Et c'est justement ce que je ne veux pas ! Cette requête met un certain temps à s'exécuter et mon but n'est donc pas de l'exécuter deux fois alors que je pense qu'il y une solution pour utiliser le résultat qu'elle retourne.
cameleon33, merci pour le lien sur le sdz mais ce tuto n'explique pas ce genre de cas. Il explique simplement comment exploiter le résultat d'une requête en php mais pas comment le réutiliser dans une seconde requête !
J'espère m'être mieux expliqué sur mon problème.
A+
cameleon33
Messages postés
635
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
26 février 2010
50
29 juil. 2008 à 10:14
29 juil. 2008 à 10:14
Ce que j'ai compris de ton problème :
Tu fais une requête. Elle te donne des résultats et tu veux pouvoir réutiliser ses résultats à l'intérieur d'une autre requête.. C'est bien cela?
Tu fais une requête. Elle te donne des résultats et tu veux pouvoir réutiliser ses résultats à l'intérieur d'une autre requête.. C'est bien cela?
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
>
algoplus
29 juil. 2008 à 11:10
29 juil. 2008 à 11:10
Oui mais je compte avec une clause GROUP BY qui n'est pas forcément évidente à reproduire en php alors qu'elle est très simple à utiliser en sql.
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
29 juil. 2008 à 11:04
29 juil. 2008 à 11:04
Oui, c'est ça mais je ne veux surtout pas Ré exécuter cette requête.
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 391
29 juil. 2008 à 11:33
29 juil. 2008 à 11:33
Bonjour jaacki,
Le code suivant pourra peut-être t'aider
Explication du code
Le premier while va retourner toutes les lignes du select, pour chaque ligne retournée on construit la 2éme requête avec la valeur de la colonne qui t'intéresse, ensuite on retourne toutes les valeurs avec le second while, et de même avec le troisième while.
A plus
Le code suivant pourra peut-être t'aider
$requete1 = "select blablabla from blablabla"; $rep = mysql_query($requete1); while ($row = mysql_fetch_array($rep)) { $requete2 = "select id, count(*) from" .$row['blablabla']. "group by id"; $rep2 = mysql_query($requete2); while ($row2 = mysql_fetch_array($rep2)) { echo $row2['id']; echo $row2[1]; } $requete3 = "select id2, count(*) from" .$row['blablabla']. "group by id2"; $rep3 = mysql_query($requete3); while ($row3 = mysql_fetch_array($rep3)) { echo $row3['id2']; echo $row3[1]; } }
Explication du code
Le premier while va retourner toutes les lignes du select, pour chaque ligne retournée on construit la 2éme requête avec la valeur de la colonne qui t'intéresse, ensuite on retourne toutes les valeurs avec le second while, et de même avec le troisième while.
A plus
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 391
29 juil. 2008 à 12:15
29 juil. 2008 à 12:15
Bonjour jaacki,
Le code suivant pourra peut-être t'aider
Explication du code
Le premier while va retourner toutes les lignes du select, pour chaque ligne retournée on construit la 2éme requête avec la valeur de la colonne qui t'intéresse, ensuite on retourne toutes les valeurs avec le second while, et de même avec le troisième while.
A plus
Le code suivant pourra peut-être t'aider
$requete1 = "select blablabla from blablabla"; $rep = mysql_query($requete1); while ($row = mysql_fetch_array($rep)) { $requete2 = "select id, count(*) from" .$row['blablabla']. "group by id"; $rep2 = mysql_query($requete2); while ($row2 = mysql_fetch_array($rep2)) { echo $row2['id']; echo $row2[1]; } $requete3 = "select id2, count(*) from" .$row['blablabla']. "group by id2"; $rep3 = mysql_query($requete3); while ($row3 = mysql_fetch_array($rep3)) { echo $row3['id2']; echo $row3[1]; } }
Explication du code
Le premier while va retourner toutes les lignes du select, pour chaque ligne retournée on construit la 2éme requête avec la valeur de la colonne qui t'intéresse, ensuite on retourne toutes les valeurs avec le second while, et de même avec le troisième while.
A plus
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
29 juil. 2008 à 13:24
29 juil. 2008 à 13:24
Salut !
Merci pour ton temps. Par contre ce code que tu me donnes ne me convient pas tout simplement car les sous-requêtes sont construites à partir de chaque lignes du résultat de la première requête or ce n'est pas ce que je veux ! Je veux que les sous-requêtes utilise le résultat donné par la requête 1, pas ligne par ligne.
En fait, cet exemple pourrait peut être rendre la chose plus claire : je voudrais que le résultat de la première requête soit considéré comme une vue qui serait ensuite interrogée par les deux autres requêtes 2 et 3. Peut être cette comparaison permet de mieux expliquer mon problème ??
Merci pour ton temps. Par contre ce code que tu me donnes ne me convient pas tout simplement car les sous-requêtes sont construites à partir de chaque lignes du résultat de la première requête or ce n'est pas ce que je veux ! Je veux que les sous-requêtes utilise le résultat donné par la requête 1, pas ligne par ligne.
En fait, cet exemple pourrait peut être rendre la chose plus claire : je voudrais que le résultat de la première requête soit considéré comme une vue qui serait ensuite interrogée par les deux autres requêtes 2 et 3. Peut être cette comparaison permet de mieux expliquer mon problème ??
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 391
29 juil. 2008 à 13:52
29 juil. 2008 à 13:52
Bonjour jaacki,
La solution serait de passer par une table temporaire et d'effectuer tes requêtes sur cette table temporaire
Tu dois juste avoir les privilèges nécessaires pour la création des tables. La table temporaire sera automatiquement détruite à la fin de la connection.
A plus
La solution serait de passer par une table temporaire et d'effectuer tes requêtes sur cette table temporaire
$create_table = "CREATE TEMPORARY TABLE matable AS SELECT blablabla FROM blablablabla"; $lacreation = mysql_query($create_table) or die ('Erreur création table temporaire'); $requete2 = "select id, count(*) from matable group by id"; $requete3 = "select id2, count(*) from matable group by id2";
Tu dois juste avoir les privilèges nécessaires pour la création des tables. La table temporaire sera automatiquement détruite à la fin de la connection.
A plus
jaacki
Messages postés
31
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
28 janvier 2009
29 juil. 2008 à 16:37
29 juil. 2008 à 16:37
Voila c'est une solution de ce style la que je voulais ! Seulement je me demande, en termes de performances, la création de tables temporaires est plutôt rapide ou plus longue ??
Le but est bien évidement de gagner du temps donc ce critère prime !
Le but est bien évidement de gagner du temps donc ce critère prime !
Christounet
Messages postés
1264
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 391
29 juil. 2008 à 17:40
29 juil. 2008 à 17:40
Bonjour,
Tout dépendra du nombre de lignes retourné par ton select.
Tu peux aussi créer ta table temporaire en mémoire, le code étant alors
Lorsque tes autres requêtes n'ont plus besoin de ta table temporaire et tu veux libérer de l'espace mémoire, tu rajoutes le code suivant
A plus
Tout dépendra du nombre de lignes retourné par ton select.
Tu peux aussi créer ta table temporaire en mémoire, le code étant alors
$creation = "create temporary table matable engine=memory as select blablabla from blablablabla"
Lorsque tes autres requêtes n'ont plus besoin de ta table temporaire et tu veux libérer de l'espace mémoire, tu rajoutes le code suivant
$drop = "drop temporary table matable"
A plus
24 juil. 2008 à 16:06
la variable $rep ne contient pas une valeur ici (cf mon exemple) mais elle contient le retour de la fonction mysql_query !
En fait en executant ce code , php remplace $rep par "Resource id #8", donc évidement la requete ne fonctionne pas !