pb: récuperation requete MySQL

  • Créateur du sujet Créateur du sujet heroe
  • Date de début Date de début

heroe

Membre actif
6 Mai 2000
368
18
Paris
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.
 
Salut.

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

Bloc de code:
[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
 
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 ;-)
 
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
 
  • J’aime
Réactions: heroe
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: