Requete dans une boucle, danger ? - SQL/NoSQL - Programmation
Marsh Posté le 03-09-2009 à 10:36:17
Ta boucle s'arrette sur une condition fixe qui ne risque pas de bloquer ? tu fais assez de test de vérification avant d'envoyer la sauce à MySQL ?
Sinon pour moi peu de risque.
Marsh Posté le 03-09-2009 à 11:07:27
T'es sûr de ne pas pouvoir sortir la requête de la boucle? ça me parait étrange.
Marsh Posté le 03-09-2009 à 11:41:15
Déjà merci beaucoup d'avoir pris la peine de me répondre
antac a écrit : Ta boucle s'arette sur une condition fixe qui ne risque pas de bloquer ? tu fais assez de test de vérification avant d'envoyer la sauce à MySQL ? |
Concrètement voici la tronche de la table
id_theme SMALLINT auto_increment clef primaire
nom VARCHAR(120)
nom_uk VARCHAR(120)
niveau_1 SMALLINT Indexé
niveau_2 SMALLINT Indexé
Et les 2 types de requetes réalisés dans la boucle
soit : SELECT nom FROM ma_table WHERE id_theme = '$id_theme' LIMIT 1
soit : SELECT t1.nom, t2.nom FROM ma_table t1, ma_table t2 WHERE t2.niveau_2 = '$id_theme' AND t2.niveau_1 = t1.id_theme LIMIT 1
Citation : T'es sûr de ne pas pouvoir sortir la requête de la boucle? ça me parait étrange.:o |
Bon je n'ai pas eu de formation théorique, j'ai lu et relu un bouquin sur le sql d'oreilly uniquement. Simplement je fais un site qui s'apparente plus à un logiciel d'ailleurs et sur les 1,70mo de codes déjà écrit, répartit sur 199 pages c'est le premier cas de figure où je ne vois pas comment faire autrement. Il existe certainement une astuce mais je suis sur que ça doit être très très alambiqué.
Marsh Posté le 03-09-2009 à 11:47:07
Rien de bien compliqué : tu génères ta requête qui retourne le tout, et tu boucles sur le résultat :
select titi, toto, tutu from table where id in (id1, id2, id2, id4, id5 [...])
Et sinon, 1.7mo de code php sur 199 pages, ouch.
Marsh Posté le 03-09-2009 à 11:57:17
En faite non regarde dans la deuxième requete je vais chercher sur "t2.niveau_2" et non sur la clef primaire je ne peux pas faire ce que tu dis.
Il y a certainement une solution comme je disais, peut être qu'un matin en me réveillant j'aurai une révélation. En attendant c'est surtout pour savoir si cette boucle qui tournera 5 fois maximum peut avec l'usage me créer des soucis au niveau de ma bdd.
Citation : |
J'avoue il y a du html dedans , et faut compter mes tartines de commentaires aussi
Marsh Posté le 03-09-2009 à 12:09:45
Scarf3ss3 a écrit : En faite non regarde dans la deuxième requete je vais chercher sur "t2.niveau_2" et non sur la clef primaire je ne peux pas faire ce que tu dis. |
Rien de bien compliqué non plus.
SELECT t1.nom, t2.nom
FROM ma_table t1 join ma_table t2 on t2.niveau_1 = t1.id_theme
WHERE t2.niveau_2 in (..., ...)
Marsh Posté le 03-09-2009 à 12:21:23
Oui ça d'accords aussi mais ça ne va pas car j'ai pas tout expliqué, il y a d'autres paramètres à prendre en compte comme entre autre en amont un tri qui se fait au niveau des colonnes d'une autre table qui va me générer ensuite ma boucle. Je t'assure que c'est vraiment pas aussi simple que de passer mes résultats d'une précédente requete dans une boucle ensuite. Avec cette page je suis au limite de mes capacités intellectuelles
Mais toi quel est juste ton avis sur la dangerosité de ces 5 requetes dans une boucle ?
Marsh Posté le 03-09-2009 à 12:26:42
Je vois pas pourquoi ce serait dangereux...ça risque juste d'être un peu lent.
Marsh Posté le 03-09-2009 à 12:31:17
Haaaaa ça me rassure
Bon je remonterai le post d'ici quelques années quand j'aurai le courage de replonger dans ce bout de programme et d'expliquer clairement ma problématique.
Mais merci beaucoup de tes réponses
Marsh Posté le 02-09-2009 à 21:01:55
Bonsoir à tous,
ma question est très rapide, je ne peux pas éviter sur une de mes pages de faire passer une requete dans une boucle while.
Derrière une condition dans ce while, ça va exécuter un select tout con avec uniquement le n° de la clef primaire dans la clause WHERE, ou ça va exécuter un SELECT avec une jointure interne, donc de la table avec elle même pour aller recuperer d'autres données.
En sachant que la boucle tournera maximum 5 fois, que la table où ça va taper il y aura maximum 1000 entrées et que c'est sous mysql, mais par contre la boucle sera amené à être exécutée des dizaines de milliers de fois par jour du fait du nombre des utilisateurs. cela peut représenter un risque pour ma bdd ?
Message édité par Scarf3ss3 le 02-09-2009 à 21:47:27