Pb de requête Bdd / php

Pb de requête Bdd / php - PHP - Programmation

Marsh Posté le 05-03-2005 à 13:50:28    

TABLE OPM
http://yolda.free.fr/opm2.JPG
http://yolda.free.fr/opm.JPG
 
TABLE CONNAISSANCE
http://yolda.free.fr/conn2.JPG
http://yolda.free.fr/conn.JPG
 
vlà deux tables de ma bdd
j'aimerai récup nom_opm, num_opm, description_opm, url_opm, duree_opm et surtout nom_conn, c'est là qu'est le pb, puisque à chaque OPM (objet pédagogique multimédia, une cours quoi :o) est associé plusieurs connaissances, d'où les ":" pour séparer les "id-con".
j'ai qqes connaissances de base en bdd mais on a pas l'habitude de manier des champs avec une "liste" d'entrées...
 
Donc ma question c'est : comment récupérer un résultat qui ressemble à ça :
 
&nomOPM7=La fin des haricots (teurs)
&numOPM7=7
&descriptionOPM7=Haha trop drole
&conOPM7=Connaissance 1:Connaissance 3
&chemin7=www.disney.com
&dureeOPM7=50
 
&nomOPM2=titreOPM2
&numOPM2=2
&descriptionOPM2=Description de l'OPM 2
&conOPM2=Connaissance 2:Connaissance 4
&chemin2=www.disney.com
&dureeOPM2=50
 
(j'ai mis n'imp dans les valeurs là hein :o)
 
 
Alors j'ai bien tenté ça dans le php , mais marche pas :
 
REQUETE 1 :
 
$query4 = "SELECT nom_opm, con_opm FROM opm;";
$result4 = requete($query4,$hostname_connexion,$username_connexion,$password_connexion,$db_name_connexion);
$cpt=1;
while( list($nopm, $ncon) = mysql_fetch_row($result4) ){
echo "&nOPM".$cpt."=$nopm";
echo "&ncon".$cpt."=$ncon";
$cpt++;
}
 
Le résultat de cette requête est :
 
http://yolda.free.fr/req4.JPG
 
Soit dans le php :
&nOPM1=titreOPM1&ncon1=3:8&nOPM2=titreOPM2&ncon2=1:2:7
&nOPM3=titreOPM3&ncon3=1:6&nOPM4=titreOPM4&ncon4=1:2:7
&nOPM5=titreOPM5&ncon5=1:2:8&nOPM6=titreOPM6&ncon6=1:6
&nOPM7=La fin des haricots (teurs)&ncon7=5&nOPM8=titreOPM8&ncon8=2:10
 
jusque là tout est normal.
 
 
REQUETE 2 :
 
$query = "SELECT nom_opm, num_opm, description_opm, nom_conn, url_opm, duree_opm FROM connaissance, opm  
WHERE connaissance.id_conn=opm.con_opm AND LOCATE($result4, CONCAT(':',id_conn,':')) > 0 ORDER BY num_opm ASC;";
$result = requete($query,$hostname_connexion,$username_connexion,$password_connexion,$db_name_connexion);
$nbresultat = mysql_num_rows($result);
if($nbresultat>0){
   $cpt=1;
   while( list($nom, $numero, $descr, $ncon, $chemin, $duree) = mysql_fetch_row($result) ){
          echo "&nomOPM".$cpt."=$nom";
          echo "&numOPM".$cpt."=$numero";
          echo "&descriptionOPM".$cpt."=$descr";
   echo "&conOPM".$cpt."=$ncon";
   echo "&chemin".$cpt."=$chemin";
   echo "&dureeOPM".$cpt."=$duree";  
          $cpt++;
   }
   $cpt--;
   echo "&nbOPM=$cpt";
}
 
Là ça chie dans la colle j'ai droit à ça pour le php :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\barnav\barre\liste_opm.php on line 39
 
 
La ligne 39 est celle en rouge :o
Il semblerait que php ai du mal à réutiliser le résultat de la requête précédente, non ? Bref là mes compétences très limitées montrent ben... leurs limites :/
 
Voilà pour les courageux qui ont été au bout et qui m'ont lu merci de votre attention déjà :o
Pi alors ceux qui pourraient aider, je les remercie 1000 fois d'avance  [:pronucleus69]


Message édité par Yoda57 le 05-03-2005 à 13:54:23
Reply

Marsh Posté le 05-03-2005 à 13:50:28   

Reply

Marsh Posté le 05-03-2005 à 14:02:54    

le concat me parait bizarre...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 05-03-2005 à 14:08:01    

ce qui 'chie dans la colle' c'est surtout ton champ contenant les differentes connaissance par opm x:y:z
fait une table supplémentaire contenant :
 
id_opm
id_conn
 
ainsi pour chaque opm tu entre la ou les connaissances associés et ca te fais une requete 10x plus simple, aucun CONCAT necessaire
 
aussi, fait un echo de tes requetes sql pour les copier ds phpmyadmin pour verifier leur validité


Message édité par Profil supprimé le 05-03-2005 à 14:09:34
Reply

Marsh Posté le 05-03-2005 à 14:13:58    

je pense que j'aurai plutot fait un truc du genre...

Code :
  1. $rq = mysql_query("select * from opm" );
  2. while($row = mysql_fetch_object($rq))
  3. {
  4.    $rq2 = "select * from connaissance where id_con in any (".implode(",",explode(":",row->con_opm))." )";
  5.    [...]
  6. }


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 05-03-2005 à 14:19:53    

et un str_replace serait, je pense, meme plus rapide que l'implode de l'explode...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 05-03-2005 à 15:22:14    

merci les gars, je vais étudier tout ça :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed