Utiliser une requete dans une autre
Résolu
Mika
-
blackdam Messages postés 327 Date d'inscription Statut Membre Dernière intervention -
blackdam Messages postés 327 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Voila mon soucis, je travaille sur une base de données assez importante.
J'aimerais utiliser le résultat d'une requête dans une autre mais je ne trouve pas la solution.
Voici mon code :
$categories = 'select c.categories_id as categories from ' . TABLE_CATEGORIES . ' c where c.parent_id = 183 ';
$categories_array = tep_db_query($categories);
$query1 = 'select o.orders_id from ' . TABLE_ORDERS . ' o ';
$query1 .= ', ' . TABLE_ORDERS_PRODUCTS . ' op ';
$query1 .= ', ' . TABLE_PRODUCTS . ' p ';
$query1 .= ', ' . TABLE_PRODUCTS_TO_CATEGORIES . ' pc ';
$query1 .= 'where pc.categories_id in ' . $categories['categories'] . ' ';
$livre_array = tep_db_query($query1);
La première requête me renvoie une liste de chiffre que je voudrais réutiliser dans la seconde.
J'ai essayé une requête imbriquée, cela fonctionne mais la requête entière fait ralentir le serveur.
merci de votre aide
Voila mon soucis, je travaille sur une base de données assez importante.
J'aimerais utiliser le résultat d'une requête dans une autre mais je ne trouve pas la solution.
Voici mon code :
$categories = 'select c.categories_id as categories from ' . TABLE_CATEGORIES . ' c where c.parent_id = 183 ';
$categories_array = tep_db_query($categories);
$query1 = 'select o.orders_id from ' . TABLE_ORDERS . ' o ';
$query1 .= ', ' . TABLE_ORDERS_PRODUCTS . ' op ';
$query1 .= ', ' . TABLE_PRODUCTS . ' p ';
$query1 .= ', ' . TABLE_PRODUCTS_TO_CATEGORIES . ' pc ';
$query1 .= 'where pc.categories_id in ' . $categories['categories'] . ' ';
$livre_array = tep_db_query($query1);
La première requête me renvoie une liste de chiffre que je voudrais réutiliser dans la seconde.
J'ai essayé une requête imbriquée, cela fonctionne mais la requête entière fait ralentir le serveur.
merci de votre aide
A voir également:
- Utiliser une requete dans une autre
- Utiliser chromecast - Guide
- Utiliser une tablette comme ecran pc - Guide
- Utiliser iphone comme webcam - Guide
- Utiliser gmail avec une autre adresse - Guide
- Comment utiliser utorrent - Télécharger - Téléchargement & Transfert
8 réponses
bonjour!
c'est uniquement du code SQL ou autour il y a un autre langage de programmation?
c'est uniquement du code SQL ou autour il y a un autre langage de programmation?
blackdam
Messages postés
327
Date d'inscription
Statut
Membre
Dernière intervention
35
Tu pourrais peut etre faire une boucle "for" et pour chaque valeur dans ton tableau, exécuter la requete et stocker le résultat dans un autre tableau... je ne sais pas si c'est une façon optimisée de faire :p
$categories = 'select c.categories_id as categories from ' . TABLE_CATEGORIES . ' c where c.parent_id = 183 ';
$categories_array = tep_db_query($categories);
while( $categories = tep_db_fetch_array($categories_array))
{
$query1 = 'select o.orders_id from ' . TABLE_ORDERS . ' o ';
$query1 .= ', ' . TABLE_ORDERS_PRODUCTS . ' op '; $query1 .= ', ' . TABLE_PRODUCTS . ' p ';
$query1 .= ', ' . TABLE_PRODUCTS_TO_CATEGORIES . ' pc ';
$query1 .= 'where pc.categories_id in ' . $categories['categories'] . ' ';
}
Comme ça, j'ai déja essayé mais cela me renvoie Query est vide!!
$categories_array = tep_db_query($categories);
while( $categories = tep_db_fetch_array($categories_array))
{
$query1 = 'select o.orders_id from ' . TABLE_ORDERS . ' o ';
$query1 .= ', ' . TABLE_ORDERS_PRODUCTS . ' op '; $query1 .= ', ' . TABLE_PRODUCTS . ' p ';
$query1 .= ', ' . TABLE_PRODUCTS_TO_CATEGORIES . ' pc ';
$query1 .= 'where pc.categories_id in ' . $categories['categories'] . ' ';
}
Comme ça, j'ai déja essayé mais cela me renvoie Query est vide!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
si je comprend bien et que ton $categories_array est un tableau...
Pour les trucs en gras et soulignés jsui pas sur de la synthaxe... jsui plus orienté java mais c'est pour te guider dans le raisonnement...
en gros, tu boucles pour chaque variable qu'il y a dans ton tableau!
Plus t'avance moins vite, moins t'avance plus vite
$categories_array = tep_db_query($categories); for( $i = 0, i < "taille de $categorie_array", i++) { $query1 = 'select o.orders_id from ' . TABLE_ORDERS . ' o '; $query1 .= ', ' . TABLE_ORDERS_PRODUCTS . ' op '; $query1 .= ', ' . TABLE_PRODUCTS . ' p '; $query1 .= ', ' . TABLE_PRODUCTS_TO_CATEGORIES . ' pc '; $query1 .= 'where pc.categories_id = ' . $categories_array[i] . ' '; }
Pour les trucs en gras et soulignés jsui pas sur de la synthaxe... jsui plus orienté java mais c'est pour te guider dans le raisonnement...
en gros, tu boucles pour chaque variable qu'il y a dans ton tableau!
Plus t'avance moins vite, moins t'avance plus vite
Le soucis, c'est que ma requête va s'exécuter plusieurs fois...
il faudrait que je puisse récupérer les valeurs renvoyées dans la première requête et les comparer avec un IN.
Cela donnerai
where .... IN (500,600,700,800...)
il faudrait que je puisse récupérer les valeurs renvoyées dans la première requête et les comparer avec un IN.
Cela donnerai
where .... IN (500,600,700,800...)
Je sais que ta requete va s'executer plusieurs fois...
n'étant pas un as en SQL au niveau optimisation, je ne sais pas quel choix est le mieux!
mais bon, ta 1ere requete met un temps fou à s'executer... si tu as 50 nombres dans ton IN, il va comparer sa valeur à 50 nombres... ou alors executer 50 petites requetes...
au choix!
n'étant pas un as en SQL au niveau optimisation, je ne sais pas quel choix est le mieux!
mais bon, ta 1ere requete met un temps fou à s'executer... si tu as 50 nombres dans ton IN, il va comparer sa valeur à 50 nombres... ou alors executer 50 petites requetes...
au choix!