Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

pb: récuperation requete MySQL

Discussion dans 'Développement web' créé par heroe, 26 Juin 2006.

Modérateurs: Nephou
  1. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    bonjour,
    je vais tenter une explication sur mon problème de requête...

    J'ai une requête du genre:

    select ref from auteur,motsclefs where auteur.num={$this->ref} and motsclefs.num={$this->ref}

    la table auteur contient les champs concernant les auteurs
    la table motsclefs contient les mots clefs
    la requête permet de rechercher les mots clefs attribués à un auteur.

    j'ai donc 2 tables et je cherche a faire un petit script php qui permettrait de recréer une nouvelle table similaire à la table auteur ou
    la requête permettrait de rajouter dans une nouvelle colonne les mots clefs.
    En fait je souhaite réunir les 2 tables en une seule...

    quand je fais une requête dans mysql, elle me ressort un truc dans le genre:

    +--------------------+
    | ref |
    +--------------------+
    | toto |
    | bidule |
    | truc |
    | machin |
    | titi |
    | test |
    +--------------------+

    cela correspond donc a tout les mots clefs associés, jusque la tout va
    bien...

    Le problème:
    Quand je récupère le résultat de cette requête et que je le réinjecte
    dans la nouvelle table, MySQL/PHP récupère juste le premier mots clefs
    des résultats, donc dans l'exemple ici ce serait "toto". Il zappe complètement les autres mots...

    Voilà, si quelqu'un a une idée du pourquoi du comment...
    je sais pas si c'est tout à fait compréhensible...

    Merci d'avance.
     
  2. iota

    iota Vétéran
    Club MacG

    Inscrit:
    19 Août 2004
    Messages:
    5 440
    J'aime reçus:
    824
    Salut.

    Ta base de données (en terme de MCD, enfin presque...) se traduit comme suit :

    Code (Text):

    [Auteur]<--0,N--------(Est Associ&#233;)--------0,N-->[Mot Cl&#233;]

    L&#233;gende :
    [xxx] : table
    (xxx) : relation
    X,Y : cardinalit&#233;
     
    Une fois traduit en SQL, &#231;a va te donner 3 tables, la table Auteur (cl&#233; primaire idA) avec les champs associ&#233;s, une table Mot Cl&#233; (cl&#233; primaire idMC) et une table d'association (issue de la relation de cardinalit&#233; maximale 0,N-0,N) qui contient l'ensemble des N-uplets (uniques qui forment une cl&#233; primaire) compos&#233;s des cl&#233;s idMC et idA (&#233;trang&#232;res donc) qui fait la relation entre les auteurs et les mots cl&#233;s associ&#233;s.

    Reste &#224; jouer avec les jointures pour obtenir les informations utiles en te basant sur les N-uplets de ta table d'association.

    @+
    iota
     
  3. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    En fait, la liaison entre les tables marche correctement,
    puisque quand je fais ma requete dans la console mysql
    le resultat est bon.

    Pour r&#233;cuperer le resultat j'ai ceci dans ma fonction:

    $requete="select ref from auteur,motsclefs where auteur.num={$this->num} and motsclefs.num={$this->num}";
    $connexion=connexion_db("toto_db");
    $ref=mysql_query($requete,$connexion) or die(mysql_error());
    $resultat=mysql_fetch_object($ref);
    $Id=$resultat->ref;

    $Id correspond donc au r&#233;sulat de la requete.
    Quand je tape la requete dans la console, mysql me renvoie plusieurs r&#233;sultats
    ce qui est normal mais si je fais un echo de $Id, php me renvoie seulement le 1er
    r&#233;sulats de la requete... je ne comprends pas pourquoi il ne prend pas en compte
    les autres...
    enfin, bon je sens que je m'exprime pas tr&#232;s bien... :rose:

    Euh sinon c'est quoi ce que t'appelles des N-uplets? parce que la je vois pas trop...

    merci ;-)
     
  4. iota

    iota Vétéran
    Club MacG

    Inscrit:
    19 Août 2004
    Messages:
    5 440
    J'aime reçus:
    824
    Avec deux tables, tu ne pourras associer qu'un seul mot cl&#233; par auteur (ou alors c'est de la bidouille).

    Pour php, tu dois appeler mysql_fetch_object tant que tu as des r&#233;sultats (dansune boucle). Voir la documentation et les exemples associ&#233;s.

    Un N-uplet, c'est un groupe de N &#233;l&#233;ments, dans le cas pr&#233;sent, un 2-uplet (soit un couple) form&#233; par les cl&#233;s primaires des tables auteur et mot cl&#233;.

    @+
    iota
     
    heroe aime ça.
  5. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    ok, j'ai compris!
    je m'etais dit que c'etait pas la peine etant donné que la requete
    fonctionne... mais c'est certainement de la que ça vient.
    Surtout que les 3 tables existent.

    Merci pour tout!
    :up:
     
Modérateurs: Nephou
Chargement...