j'ai un petit soucis avec deux boucles imbriquées...
Voici ce que j'essaye de faire en simplifiant :
j'ai une liste de mots dans $ref
Récuperer une liste de messages par la commande $req
Je fais une boucle avec toutes les valeurs de $ref et je regarde pour
chacune de ses valeurs si elle est contenue dans une des lignes des
messages :
$req = mysql_query ("select id,message from table where ...");
foreach ($ref as $search_ref)
{
while ($result = mysql_fetch_array($req)
{
$message = $result['message'];
if (ereg($search_ref,$message)) $liste.= $result['id'];
}
}
Bref, ça marche tres bien pour la premiere valeur de $ref, mais ensuite,
j'ai plus rien....
Il faudrait que je deplace la ligne :
$req = mysql_query.... à l'interieur de la boucle while, mais ca me
ferait autant d'acces à la base que de valeur qui sont contenues dans
$ref !!!
A quel endroit je me trompe ? Dois-je obligatoirement inclure la
requette dans la boucle et augmenter le nbr d'acces à la base par
conséquence ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
[...]
$req = mysql_query ("select id,message from table where ..."); foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req) { $message = $result['message']; if (ereg($search_ref,$message)) $liste.= $result['id']; } }
[...] Il faudrait que je deplace la ligne : $req = mysql_query.... à l'interieur de la boucle while, mais ca me ferait autant d'acces à la base que de valeur qui sont contenues dans $ref !!!
Et refaire autant d'appels à mysql_fetch_array que de valeurs dans $search_ref, ça ne te gêne pas ?
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner mieux. Enfin... c'que j'en dis... je n'ai jamais fait de mysql...
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
[...]
$req = mysql_query ("select id,message from table where ...");
foreach ($ref as $search_ref)
{
while ($result = mysql_fetch_array($req)
{
$message = $result['message'];
if (ereg($search_ref,$message)) $liste.= $result['id'];
}
}
[...]
Il faudrait que je deplace la ligne :
$req = mysql_query.... à l'interieur de la boucle while, mais ca me
ferait autant d'acces à la base que de valeur qui sont contenues dans
$ref !!!
Et refaire autant d'appels à mysql_fetch_array que de valeurs dans
$search_ref, ça ne te gêne pas ?
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner
mieux. Enfin... c'que j'en dis... je n'ai jamais fait de mysql...
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
$req = mysql_query ("select id,message from table where ..."); foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req) { $message = $result['message']; if (ereg($search_ref,$message)) $liste.= $result['id']; } }
[...] Il faudrait que je deplace la ligne : $req = mysql_query.... à l'interieur de la boucle while, mais ca me ferait autant d'acces à la base que de valeur qui sont contenues dans $ref !!!
Et refaire autant d'appels à mysql_fetch_array que de valeurs dans $search_ref, ça ne te gêne pas ?
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner mieux. Enfin... c'que j'en dis... je n'ai jamais fait de mysql...
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
JC
Et refaire autant d'appels à mysql_fetch_array que de valeurs dans $search_ref, ça ne te gêne pas ?
Ben si justement ! D'ou l'origine de mon post ! si $ref comporte 200 valeurs, c'est 200 acces avec la seule solution qui fonctionne (que j'ai trouvée)!
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner mieux.
C'est justement l'aide que je viens demander ici... La solution qui consiste à ne faire qu'une seule requete ne fonctione pas. Surement qqch de tout bete, mais ça fait 2 jours que je bloque dessus !
Enfin... c'que j'en dis... je n'ai jamais fait de mysql...
JC.
Et refaire autant d'appels à mysql_fetch_array que de valeurs dans
$search_ref, ça ne te gêne pas ?
Ben si justement ! D'ou l'origine de mon post ! si $ref comporte 200
valeurs, c'est 200 acces avec la seule solution qui fonctionne (que j'ai
trouvée)!
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner
mieux.
C'est justement l'aide que je viens demander ici...
La solution qui consiste à ne faire qu'une seule requete ne fonctione
pas. Surement qqch de tout bete, mais ça fait 2 jours que je bloque dessus !
Enfin... c'que j'en dis... je n'ai jamais fait de mysql...
Et refaire autant d'appels à mysql_fetch_array que de valeurs dans $search_ref, ça ne te gêne pas ?
Ben si justement ! D'ou l'origine de mon post ! si $ref comporte 200 valeurs, c'est 200 acces avec la seule solution qui fonctionne (que j'ai trouvée)!
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner mieux.
C'est justement l'aide que je viens demander ici... La solution qui consiste à ne faire qu'une seule requete ne fonctione pas. Surement qqch de tout bete, mais ça fait 2 jours que je bloque dessus !
Enfin... c'que j'en dis... je n'ai jamais fait de mysql...
JC.
Olivier Miakinen
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner mieux.
C'est justement l'aide que je viens demander ici...
Tu ne sembles pas avoir compris ma réponse.
Je te suggérais de remplacer : -------------------------------------------------- foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req)) --------------------------------------------------
par : -------------------------------------------------- while ($result = mysql_fetch_array($req)) { foreach ($ref as $search_ref) --------------------------------------------------
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner
mieux.
C'est justement l'aide que je viens demander ici...
Tu ne sembles pas avoir compris ma réponse.
Je te suggérais de remplacer :
--------------------------------------------------
foreach ($ref as $search_ref)
{
while ($result = mysql_fetch_array($req))
--------------------------------------------------
par :
--------------------------------------------------
while ($result = mysql_fetch_array($req))
{
foreach ($ref as $search_ref)
--------------------------------------------------
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Essaye donc d'intervertir les deux boucles, ça devrait fonctionner mieux.
C'est justement l'aide que je viens demander ici...
Tu ne sembles pas avoir compris ma réponse.
Je te suggérais de remplacer : -------------------------------------------------- foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req)) --------------------------------------------------
par : -------------------------------------------------- while ($result = mysql_fetch_array($req)) { foreach ($ref as $search_ref) --------------------------------------------------
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Bruno Desthuilliers
Bonjour,
j'ai un petit soucis avec deux boucles imbriquées... (snip)
Je fais une boucle avec toutes les valeurs de $ref et je regarde pour chacune de ses valeurs si elle est contenue dans une des lignes des messages :
$req = mysql_query ("select id,message from table where ..."); foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req) { $message = $result['message']; if (ereg($search_ref,$message)) $liste.= $result['id']; } }
Pour autant que je sache, MySQL a un support pour les expressions rationnelles dans la clause where: http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Bref, avec un peu de chances, ça devrait pouvoir se faire en une seule requête, et sans boucle...
Bonjour,
j'ai un petit soucis avec deux boucles imbriquées...
(snip)
Je fais une boucle avec toutes les valeurs de $ref et je regarde pour
chacune de ses valeurs si elle est contenue dans une des lignes des
messages :
$req = mysql_query ("select id,message from table where ...");
foreach ($ref as $search_ref)
{
while ($result = mysql_fetch_array($req)
{
$message = $result['message'];
if (ereg($search_ref,$message)) $liste.= $result['id'];
}
}
Pour autant que je sache, MySQL a un support pour les expressions
rationnelles dans la clause where:
http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Bref, avec un peu de chances, ça devrait pouvoir se faire en une seule
requête, et sans boucle...
j'ai un petit soucis avec deux boucles imbriquées... (snip)
Je fais une boucle avec toutes les valeurs de $ref et je regarde pour chacune de ses valeurs si elle est contenue dans une des lignes des messages :
$req = mysql_query ("select id,message from table where ..."); foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req) { $message = $result['message']; if (ereg($search_ref,$message)) $liste.= $result['id']; } }
Pour autant que je sache, MySQL a un support pour les expressions rationnelles dans la clause where: http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Bref, avec un peu de chances, ça devrait pouvoir se faire en une seule requête, et sans boucle...
bruno at modulix
JC wrote: (snip)
La solution qui consiste à ne faire qu'une seule requete ne fonctione pas. Surement qqch de tout bete,
MySQL supporte les regexps dans les clauses where: http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Donc si tu a un array avec tes regexps, tu dois pouvoir avoir ce que tu veux en une seule requête, et sans boucle...
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
JC wrote:
(snip)
La solution qui consiste à ne faire qu'une seule requete ne fonctione
pas. Surement qqch de tout bete,
MySQL supporte les regexps dans les clauses where:
http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Donc si tu a un array avec tes regexps, tu dois pouvoir avoir ce que tu
veux en une seule requête, et sans boucle...
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
MySQL supporte les regexps dans les clauses where: http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Donc si tu a un array avec tes regexps, tu dois pouvoir avoir ce que tu veux en une seule requête, et sans boucle...
Mlaheureusement, je ne pourrai pas avoir la resultat que j'espère... J'ai donné un exemple plus concret en réponse d'Oliver. Merci pour ta réponse.
JC.
JC
Pour autant que je sache, MySQL a un support pour les expressions rationnelles dans la clause where: http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Bref, avec un peu de chances, ça devrait pouvoir se faire en une seule requête, et sans boucle...
Merci de ta réponse. J'ai regardé le lien que tu m'as donné, mais cela ne peut pas me donner le résultat que je souhaite. Je suis obligé de faire 2 boucles imbriquées. J'ai donné un exemple qui resume bien mon probleme en réponse d'Oliver. Merci par ailleurs de ta réponse.
JC.
Pour autant que je sache, MySQL a un support pour les expressions
rationnelles dans la clause where:
http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Bref, avec un peu de chances, ça devrait pouvoir se faire en une seule
requête, et sans boucle...
Merci de ta réponse. J'ai regardé le lien que tu m'as donné, mais cela
ne peut pas me donner le résultat que je souhaite. Je suis obligé de
faire 2 boucles imbriquées.
J'ai donné un exemple qui resume bien mon probleme en réponse d'Oliver.
Merci par ailleurs de ta réponse.
Pour autant que je sache, MySQL a un support pour les expressions rationnelles dans la clause where: http://dev.mysql.com/doc/refman/4.1/en/regexp.html
Bref, avec un peu de chances, ça devrait pouvoir se faire en une seule requête, et sans boucle...
Merci de ta réponse. J'ai regardé le lien que tu m'as donné, mais cela ne peut pas me donner le résultat que je souhaite. Je suis obligé de faire 2 boucles imbriquées. J'ai donné un exemple qui resume bien mon probleme en réponse d'Oliver. Merci par ailleurs de ta réponse.
JC.
JC
Tu ne sembles pas avoir compris ma réponse.
Je te suggérais de remplacer : -------------------------------------------------- foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req)) --------------------------------------------------
par : -------------------------------------------------- while ($result = mysql_fetch_array($req)) { foreach ($ref as $search_ref) --------------------------------------------------
J'avais mal compris ta réponse effectivement, mais je n'aurai pas le resultat que je cherche... soit ma table comportant des noms, et une liste de numeros de réference que la personne possède
bertran | 012,058,123,142,546,789 georges | 025,058,421,546,812 william | 030,123,789,854,888,963,987,999
Sur un formulaire, on me demande quels sont les personnes qui ont les objets 005,058,142,789
Je souhaite indiquer pour chacun des ces objets quels sont les personnes qui les possèdent. La methode qui me paraissait le plus simple consiste à lire le contenu de ma table une seule fois, puis dans une boucle je teste pour chaque reference demandée qui possede cette reference. Dans ce cas, la boucle ne marchera que pour la 1ere reference de ma liste (soit 005). Si par contre je fais une requete dans chaque boucle (soit 4 car il y a 4 references) cela fonctionne. Mais je ne pense pas que faire autant d'acces à la base qu'il y a de references soit une bonne idee.
JC.
Tu ne sembles pas avoir compris ma réponse.
Je te suggérais de remplacer :
--------------------------------------------------
foreach ($ref as $search_ref)
{
while ($result = mysql_fetch_array($req))
--------------------------------------------------
par :
--------------------------------------------------
while ($result = mysql_fetch_array($req))
{
foreach ($ref as $search_ref)
--------------------------------------------------
J'avais mal compris ta réponse effectivement, mais je n'aurai pas le
resultat que je cherche...
soit ma table comportant des noms, et une liste de numeros de réference
que la personne possède
bertran | 012,058,123,142,546,789
georges | 025,058,421,546,812
william | 030,123,789,854,888,963,987,999
Sur un formulaire, on me demande quels sont les personnes qui ont les
objets 005,058,142,789
Je souhaite indiquer pour chacun des ces objets quels sont les personnes
qui les possèdent.
La methode qui me paraissait le plus simple consiste à lire le contenu
de ma table une seule fois, puis dans une boucle je teste pour chaque
reference demandée qui possede cette reference.
Dans ce cas, la boucle ne marchera que pour la 1ere reference de ma
liste (soit 005). Si par contre je fais une requete dans chaque boucle
(soit 4 car il y a 4 references) cela fonctionne. Mais je ne pense pas
que faire autant d'acces à la base qu'il y a de references soit une
bonne idee.
Je te suggérais de remplacer : -------------------------------------------------- foreach ($ref as $search_ref) { while ($result = mysql_fetch_array($req)) --------------------------------------------------
par : -------------------------------------------------- while ($result = mysql_fetch_array($req)) { foreach ($ref as $search_ref) --------------------------------------------------
J'avais mal compris ta réponse effectivement, mais je n'aurai pas le resultat que je cherche... soit ma table comportant des noms, et une liste de numeros de réference que la personne possède
bertran | 012,058,123,142,546,789 georges | 025,058,421,546,812 william | 030,123,789,854,888,963,987,999
Sur un formulaire, on me demande quels sont les personnes qui ont les objets 005,058,142,789
Je souhaite indiquer pour chacun des ces objets quels sont les personnes qui les possèdent. La methode qui me paraissait le plus simple consiste à lire le contenu de ma table une seule fois, puis dans une boucle je teste pour chaque reference demandée qui possede cette reference. Dans ce cas, la boucle ne marchera que pour la 1ere reference de ma liste (soit 005). Si par contre je fais une requete dans chaque boucle (soit 4 car il y a 4 references) cela fonctionne. Mais je ne pense pas que faire autant d'acces à la base qu'il y a de references soit une bonne idee.
JC.
ftc
J'avais mal compris ta réponse effectivement, mais je n'aurai pas le resultat que je cherche... soit ma table comportant des noms, et une liste de numeros de réference que la personne possède
bertran | 012,058,123,142,546,789 georges | 025,058,421,546,812 william | 030,123,789,854,888,963,987,999
Sur un formulaire, on me demande quels sont les personnes qui ont les objets 005,058,142,789
En fait, ton problème se résoud en repensant ta base de données qui n'est pas du tout normalisée.
Table 1 personne: id_personne, nom Table 2 objet: id_objet, nom Table 3 personne_objet: id_personne,id_objet
C'est une relation classique n->m
J'avais mal compris ta réponse effectivement, mais je n'aurai pas le
resultat que je cherche...
soit ma table comportant des noms, et une liste de numeros de réference
que la personne possède
bertran | 012,058,123,142,546,789
georges | 025,058,421,546,812
william | 030,123,789,854,888,963,987,999
Sur un formulaire, on me demande quels sont les personnes qui ont les
objets 005,058,142,789
En fait, ton problème se résoud en repensant ta base de données qui
n'est pas du tout normalisée.
Table 1 personne: id_personne, nom
Table 2 objet: id_objet, nom
Table 3 personne_objet: id_personne,id_objet
J'avais mal compris ta réponse effectivement, mais je n'aurai pas le resultat que je cherche... soit ma table comportant des noms, et une liste de numeros de réference que la personne possède
bertran | 012,058,123,142,546,789 georges | 025,058,421,546,812 william | 030,123,789,854,888,963,987,999
Sur un formulaire, on me demande quels sont les personnes qui ont les objets 005,058,142,789
En fait, ton problème se résoud en repensant ta base de données qui n'est pas du tout normalisée.
Table 1 personne: id_personne, nom Table 2 objet: id_objet, nom Table 3 personne_objet: id_personne,id_objet
C'est une relation classique n->m
JC
En fait, ton problème se résoud en repensant ta base de données qui n'est pas du tout normalisée.
Table 1 personne: id_personne, nom Table 2 objet: id_objet, nom Table 3 personne_objet: id_personne,id_objet
C'est une relation classique n->m
Enorme merci pour cette réponse. Je vais travailler sur ça... Mon travail est donc au 2/3 déjà fait puisque j'ai une table avec tous les membres, et une table avec la liste des diffèrentes réfèrences. J'avais essayé de réduire la taille de ma table en n'eregistrant qu'une seule ligne par utilisateur (qu'il ait une ou plusieurs réfèrences) alors que la méthode que tu m'indiques créé autant de lignes que de réfèrences possédées par l'utilisateur... Actuellement, j'ai environ 600 utilisateurs avec une moyenne de 100 réfèrences... Ma table faisait donc 600 lignes... La nouvelle devrait donc faire 600*100 soit 60.000 lignes... Ce n'est pas génant ? Ma plus grosse table actuelle (membres) posséde 3.000 entrées et cela ne pose aucun soucis, mais je n'ai aucune expérience sur une table à 60.000 entrées...
JC.
En fait, ton problème se résoud en repensant ta base de données qui
n'est pas du tout normalisée.
Table 1 personne: id_personne, nom
Table 2 objet: id_objet, nom
Table 3 personne_objet: id_personne,id_objet
C'est une relation classique n->m
Enorme merci pour cette réponse.
Je vais travailler sur ça...
Mon travail est donc au 2/3 déjà fait puisque j'ai une table avec tous
les membres, et une table avec la liste des diffèrentes réfèrences.
J'avais essayé de réduire la taille de ma table en n'eregistrant qu'une
seule ligne par utilisateur (qu'il ait une ou plusieurs réfèrences)
alors que la méthode que tu m'indiques créé autant de lignes que de
réfèrences possédées par l'utilisateur...
Actuellement, j'ai environ 600 utilisateurs avec une moyenne de 100
réfèrences... Ma table faisait donc 600 lignes... La nouvelle devrait
donc faire 600*100 soit 60.000 lignes... Ce n'est pas génant ? Ma plus
grosse table actuelle (membres) posséde 3.000 entrées et cela ne pose
aucun soucis, mais je n'ai aucune expérience sur une table à 60.000
entrées...
En fait, ton problème se résoud en repensant ta base de données qui n'est pas du tout normalisée.
Table 1 personne: id_personne, nom Table 2 objet: id_objet, nom Table 3 personne_objet: id_personne,id_objet
C'est une relation classique n->m
Enorme merci pour cette réponse. Je vais travailler sur ça... Mon travail est donc au 2/3 déjà fait puisque j'ai une table avec tous les membres, et une table avec la liste des diffèrentes réfèrences. J'avais essayé de réduire la taille de ma table en n'eregistrant qu'une seule ligne par utilisateur (qu'il ait une ou plusieurs réfèrences) alors que la méthode que tu m'indiques créé autant de lignes que de réfèrences possédées par l'utilisateur... Actuellement, j'ai environ 600 utilisateurs avec une moyenne de 100 réfèrences... Ma table faisait donc 600 lignes... La nouvelle devrait donc faire 600*100 soit 60.000 lignes... Ce n'est pas génant ? Ma plus grosse table actuelle (membres) posséde 3.000 entrées et cela ne pose aucun soucis, mais je n'ai aucune expérience sur une table à 60.000 entrées...