Appel de résultat de table

Résolu
Bonjour,
je continue dans le développement de mon site et je reviens vers vous une nouvelle fois car je coince sur un nouveau problème.

Je vous explique :
Je cherche à faire un lien entre 2 tables.
La première contient tous mes personnages
id_perso; nom_perso


La seconde contient les techniques des personnages
id_tech;nom_tech;id_perso


Bien évidemment, je cherche à lier une technique à un personnage d'où le id_perso à la fin.

Jusque là, je pense pas avoir tort.

Le souci, c'est qu'un ou plusieurs personnages ont les mêmes techniques. Et j'aimerai savoir si déjà dans un premier temps, dans la colonne id_perso de ma deuxième table, on puisse mettre des valeurs comme 4;34;56 (ces nombres-là étant les id des personnages)
Si c'est le cas, dans la structure de ma table, le type de mon champ doit être un Varchar ? Ou alors autre chose ? (Je pense à Varchar, mais sans conviction)

Donc toujours si je mets dans ma table les différentes réponses dans ma table "4;34;56 ", comment les appeler sur ma page ?
J'ai tenté ça

<?php
	$sqlpersotechnique = "SELECT * FROM t_perso_technique WHERE id_perso LIKE '$id;%' 
	$resultpersotechnique = mysql_query( $sqlpersotechnique, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
?>


Sachant que le $id a été obtenu plus haut avec
$id = $_GET['id'];


Je bugue un peu car certaines fois, ça fonctionne et d'autres noms... Peut-on avoir quelque chose de plus propre svp ou alors une façon de mieux faire ?

Je vous remercie par avance.
Al'

4 réponses

  1. salut !
    Jusque là, je pense pas avoir tort. 
    

    En effet, jusque là tout va bien ! Enfin presque, si tu souhaite faire une liaison n-n (ton cas : 1 user peu avoir n tech, et 1 tech peu être attribué a plusieurs users) le mieux est d'avoir une troisième table pour la liaison (histoire d'éviter des sous traitements pour récupérer les données) :

    La première contient tous mes personnages
    id_perso; nom_perso


    La seconde contient toutes les techniques
    id_tech;nom_tech


    La troisième contient les couple technique/personnage : (ou nomera COUPLE pour l'exemple)
    id_perso;id_tech


    de cette manière ca sera plus simple de lire ou écrire/modifier les données, mais surtout tu pourra rajouter des contraintes (par exemple ne pas ajouter un couple technique/personnage si l'un des deux n'existe pas).
    récupérer les résultats :

    <?php
    	$sqlpersotechnique = "SELECT personnages.nom_perso ,techniques.nom_tech FROM personnages , techniques , COUPLE WHERE COUPLE.id_perso =' . $id . ' AND techniques.id_tech = COUPLE.id_tech and personnages.id_perso = COUPLE.id_perso 
    	$resultpersotechnique = mysql_query( $sqlpersotechnique, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
    ?>


    naga
    1. Bonjour Naga et merci pour ta réponse rapide.
      Du coup, dans ma troisième table je devrais insérer toutes les combinaisons possibles ?
      Et la construire sous cette forme :
      id_couple; id_perso; id_tech
      avec id_couple INT Primary Auto
      id_perso : int
      id_tech : int ?

      merci par avance =)
      al'
      1. Contributeur
        Salut,

        id_couple n'est pas nécessaire, la clé primaire serait alors composée de id_perso et id_tech
      2. alors l'id_couple n'est pas nécessaire dans le sens où tu peux déclarer le couple lui même comme unique , par exemple l'utilisateur 2 pour la technique 3 n'apparaîtra qu'une fois, il n'est donc pas indispensable de générer un identifiant unique de couple (sauf bien sûr si tu en as un intérêt par la suite, comme une tâche à effectuer par exemple, et du coup tu peux attribuer ton coulpe).

        Ensuite, ta troisième table contiendra les combinaisons possibles EXISTANTES (pas toutes 'toutes' ), c'est à dire que si tu veux attribuer à l'utilisateur 1 la tâche 2, tu insère ton couple dans cette table (1;2). Et ensuite, pour retirer une technique d'un utilisateur, il te suffira de donner les deux identifiants (user+tech)
    2. Ok je pense avoir compris.
      Je vais essayer et si j'ai tout bien compris, je mettrai le sujet en Résolu.
      En tout cas merci bcp de vos aides =)
      1. pas de soucis, bonne aprem.
        naga
    3. Super ça a l'air de fonctionner.
      Merci bcp encore et encore =)
      1. ok c'est cool =)
        bon dev !