Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1814 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL et PHP] Relier des données dans une table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL et PHP] Relier des données dans une table

n°1583553
pwet27
Posté le 07-07-2007 à 15:58:32  profilanswer
 

Bonjour à tous,
 
Je suis un programmeur amateur en php et la je réalise un petit site perso.
 
Voici la structure de ma table :
id  ;  depend_id  ;  contenu (nom des champs)
 
0   ; ''  ; 'blabla'
1   ; ''  ; 'b'
2 ; 0 ; 'c'
3 ; 2 ; 'd'
4 ; 0 ; 'e'
(valeurs)
 
Je me casse les dents depuis bien longtemps sur ce probleme.
 
Le contenu de l'id 3 est associé au contenu de l'id 2 qui est associé au contenu de l'id 0 qui est lui associé à aucun autre contenu.
Le contenu de l'id 4 est seulement associé au 0.
 
Je souhaiterais faire une requete qui affiche le résultat suivant :
pour 0, elle affiche blabla
pour 1, elle affiche b
pour 2, elle affiche c blabla
pour 3, elle affiche d c blabla
pour 4, elle affiche e blabla
 
Je n'ai vraiment aucune idée par où je peux commencer.
 
A noter que jutilise une base de donnée SQL, et que jassocie avec le PHP. En théorie d'aileurs, cette requete peut etre exprimer uniquement en SQL, non ?
 
Pouvez vs maider svp ? (jespere que mon pb est clair :/)
 
Merci =)
 
JP.

mood
Publicité
Posté le 07-07-2007 à 15:58:32  profilanswer
 

n°1583579
MagicBuzz
Posté le 07-07-2007 à 17:12:24  profilanswer
 

Ca dépend de ton SGBD.
 
Da façon habituelle, un SGBD n'a aucun moyen de faire ça.
Maintenant, il existe le CONNECT BY sous Oracle, ou "je sais plus quel autre truc" prévu dans la norme SQL, mais pas toujours supporté.
 
Reste alors les solutions d'écrire une procédure stockée, ou faire à la main dans ton code PHP.

n°1583590
pwet27
Posté le 07-07-2007 à 18:33:41  profilanswer
 

Ok merci.
 
J'ai pris l'option pas chere : mysql :)
 
La seule solution que javais trouvé, cetait créer une boucle à la main, cad :
if ($depend_id)
      {  
       requete pour verifier s'il y a un depend id
             if($depend_id)
etc. jusqu'à ce que la ligne n'est plus de depend id (par exemple, si on commence par 3, il voit qu'il a un depend id qui est le 2, puis il voit que le 2 a un depend id qui est de 0 etc.)
 
Le problème c'est que maintenant, il commence a y avoir bcp plus de niveau qu'avant, donc ca fait un script tres tres lourd ...
 
Peut-etre dois-je poster dans la section PHP ?
 
Merci,
 
JP.

n°1583594
MagicBuzz
Posté le 07-07-2007 à 18:41:13  profilanswer
 

algo :
 
query = "select id, depend_id, blabla from latable where id = :id"
query_bind_parameter("id", 5);
results = run_query();
while(results != null)
{
    print(results["blabla"]);
    query_bind_parameter("id", results["depend_id"]);
}

n°1583680
pwet27
Posté le 08-07-2007 à 10:13:15  profilanswer
 

Salut,
 
Merci pour ta réponse.
 
Je rencontre le problème suivant : la fonction query_bind_parameter n'existe pas ...
J'ai cherché un peu partt sur internet, mais je ne lai pas trouvé.
 
Par contre, j'ai trouvé la fonction suivante, mais je ne suis pas sur que ce soit celle la qu'il faille :  
query_bind($query,'id',5);  
 
Qu'en pense tu ?
 
Merci,
 
JP.

n°1583684
pwet27
Posté le 08-07-2007 à 10:17:08  profilanswer
 

Je rajoute un petit truc :p
query_bind / query_parameter ce sont en fait des fonctions oracles, ou alors ce que jai trouvé comme script de creation de fonction (function ...), cetait pour oracle.
Petite impasse dans mon cas, car jutilise mysql...

n°1583690
MagicBuzz
Posté le 08-07-2007 à 11:33:30  profilanswer
 

effectivement, ça a l'air d'être cette fonction.
je ne fais pas de dev PHP (c'est pour ça que je parlais "d'algo" ;)) donc ne te base pas sur ma syntaxe inventée, mais sur l'algo ;)
 
sinon, ces fonctions existent aussi pour mysql.
essaie de rechercher "requête paramétrée" ou "requête préparée" dans google pour plus d'info.
 
si vraiment tu trouves pas, tu peux continuer à coller la valeur de ton id directement dans la requête à la main. c'est juste un peu plus lent et moins propre (notammant le dernier coup, quand t'aura "null" ça va planter si tu ne bind pas en tant que paramètre, il faudra donc vérifier à la main et modifier à cet effet la condition de sortie de boucle.


Message édité par MagicBuzz le 08-07-2007 à 11:35:40
n°1583711
pwet27
Posté le 08-07-2007 à 13:56:26  profilanswer
 

Salut,
 
Merci pour ta réponse.
 
Je ne trouve pas pour mysql, ou tu du moins pour mysql & php (jai trouvé pour C#, pour ASP etc.)
 
Sinon, je ne comprends pas trop ta solution ...
 
Je vais poster sur le forum php, pour voir ce que ca donne.

n°1583713
pwet27
Posté le 08-07-2007 à 14:11:25  profilanswer
 

Ah, sur le forum, je viens de trouver ca

n°1583714
pwet27
Posté le 08-07-2007 à 14:11:46  profilanswer
 

Code :
  1. <?php
  2. $stmt = $dbh->prepare("INSERT INTO REGISTRY (nom, valeur) VALUES (:nom, :valeur)" );
  3. $stmt->bindParam(':nom', $nom);
  4. $stmt->bindParam(':valeur', $valeur);
  5. // insertion d'une ligne
  6. $nom = 'one';
  7. $valeur = 1;
  8. $stmt->execute();
  9. // insertion d'une autre ligne avec des valeurs différentes
  10. $nom = 'two';
  11. $valeur = 2;
  12. $stm->execute();


 
Qu'en pense tu ?

mood
Publicité
Posté le 08-07-2007 à 14:11:46  profilanswer
 

n°1583740
MagicBuzz
Posté le 08-07-2007 à 18:22:07  profilanswer
 

oui, c'est ce genre de choses effectivement.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL et PHP] Relier des données dans une table

 

Sujets relatifs
[PHP] Problème avec mysql_num_rows[Hibernate SQL] Rownum et Order by
streaming [PHP]insertion de données automatique
Problème PHP ![PHP] Affichage données Mysql
Extraction de données à partir d'un fichierConnection à une base de données mysql
objets métiers -> base de données 
Plus de sujets relatifs à : [SQL et PHP] Relier des données dans une table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR