Posez votre question Signaler

[mysql] Lier 2 tables [Résolu]

alucard67 38Messages postés 2 mai 2007Date d'inscription - Dernière réponse le 27 mai 2007 à 11:57
Bonjour,
je suis en train de créer un prg pour repertorier des chassis de carte de reseaux (câble), pou cela jai 2 tables (equipements et cartes):
carte
IS_C
description
serial
HW_version
SW_version
equipements
ID_E
IP
marque
nom
voila mes deux table et jai une caridnalité 1-N donc je dois fair une table de liaisons et la voici: (table relation)
relation
ID_R
ID_C
ID_E
IP
voila maintenan ce que je veux fair c'est de fair en sorte que mon programme en php puisse, juste avec l'adresse ip par exemble , me sortir ttes les cartes qui sont contenu dans un chassis.
et pour cela je ne sais pa comment fair en sorte pour que mysql sache que les info dans la table relation soit ceux qui sont dans les table carte et equipement.
maintenant un peu de voc;
un chassis et une grosse boite qui contient 16 cartes , et il existe une seul adresseIP par chassis
une cartes :ce sont des cartes pour des cables caoxiaux, il sont dans des chassis.
voila avec ces quleque info j'espere avoir une rep .
Merci d'avance !!
Lire la suite 

[mysql] Lier 2 tables »

14 réponses
Réponse
+2
moins plus
Mysql ne gere pas automatiqument les relations.
C'est a toi de faire la requete qui s'impose.

NB: je ne suis pas certain que tu ai besoin de l'ip dans la table relation

SELECT carte.IS_C 
FROM carte, equipements, relation 
WHERE 
equipements.ip='IP' and
relation.ID_E = equipements.ID_E and 
relation.ID_C = carte.IS_C


Si tu met l'ip dans la table relation c'est encore plus simple :
SELECT relation.ID_C FROM relation WHERE ip ='IP'
Ajouter un commentaire
Réponse
+0
moins plus
ok merci beaucoup je vais essayer ca, et enlever donc IP.
Parce que sans te le cacher je comprend plus ton premier exemple que ton deuxieme ;).

Merci encore.


P.S.: en fait je me suis trompé dans ma table Carte , ce n'est pas IS_C mais ID_C, ca change rien au script que tu ma donné j'espere ...?????
Ajouter un commentaire
Réponse
+0
moins plus
Dans ta table relation tu a l'id de tes cartes et l'ip du chassis

donc tu selectionne toutes les id de carte pour lesquelles l'IP du chassis correspond à celui recherché.

mais bon tu doublonne l'info IP ce qui n'est pas "propre" aux regards des standard de dev, mais ça peut se reveler utile (economie de ressource sur les requetes)
Ajouter un commentaire
Réponse
+0
moins plus
minute j'ai rien pigé en fait, deja j'ai enlever "IP" dans ma table requete pour simplifier les choses, et pour que ce soit propre.
a partir de la qu'est ce que je dois changer pour que mon script fonctionne .


voila ce ke j'ai mi

SELECT carte.ID_C FROM carte, equipements, relation WHERE equipements.ip='IP' and relation.ID_E = equipements.ID_E and relation.ID_C = carte.ID_C
Ajouter un commentaire
Réponse
+0
moins plus
SELECT carte.ID_C FROM carte, equipements, relation WHERE equipements.IP='192.168.0.1' and relation.ID_E = equipements.ID_E and relation.ID_C = carte.ID_C


remplace 192.168.0.1
par l'ip recherché.
Ajouter un commentaire
Réponse
+0
moins plus
ok d'accord, j'ai compris , mais maintenan si je veux en plus pouvoir rechercher tte les cartes avec juste le nom de l'equipememnt c'est le meme systeme , il faut juste que je rajoute

$nom=$_POST['nom'];
$IP=$_POST['IP'];

SELECT carte.ID_C FROM carte, equipements, relation WHERE equipements.IP=$IP and equipement.nom=$nom and relation.ID_E = equipements.ID_E and relation.ID_C = carte.ID_C


si j'ai bien compris ça donne ca!
non?
Ajouter un commentaire
Réponse
+0
moins plus
C'est ça mais fais gaffe à la syntaxe

equipement.nom c'est un varchar ou qqch c/ ça donc il faut des guillemets

mysql_query("select .... where ... and equipement.nom like '".$nom."' ... ");
Ajouter un commentaire
Réponse
+0
moins plus
ok , merci bien pour tout fras34, je vai mettre ca et continuer à rajouter les longue lignes qu'il me reste et je testerai le tout .
Pour l'instant je peux pas.je met resolu pour l'instant, et on vera apres mon test.

bopnne soirée et merci encore.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour

j'ai finit de mettre mes requete sql pour integrer mes données dans ma base et j'en suis finalement arrivé à notre fameuse requete de liaison .
bein script ne fonctionne pas :S

voila ce ke jai mi
(je mete tte la partie comme ca c'est vite vu)




set_time_limit(240);

$IP2 =$_POST['IP2'];
$nom2=$_POST['nom2'];



    $db = mysql_connect('*****', '****', '*****')  or die('Erreur de connexion '.mysql_error());


     mysql_select_db('projet',$db)  or die('Erreur de selection '.mysql_error()); 
     
	$select ="SELECT carte.ID_C FROM carte, equipements, relation WHERE relation.ID_E = equipements.ID_E and relation.ID_C = carte.ID_C or die('Erreur de liaison '.mysql_error())";
	mysql_query($select)or die('Erreur SQL dans la table de liaison !'.$select.'<br>'.mysql_error()); 

for ($i=1;$i<=16;$i++)
{
    $description=lire_ligne('reponse_snmp_motorola.txt',$i+16);
    $serial=lire_ligne('reponse_snmp_motorola.txt',$i+32);
    $HW=lire_ligne('reponse_snmp_motorola.txt',$i+48);
    $SW=lire_ligne('reponse_snmp_motorola.txt',$i+64);
    
    $sql = "INSERT INTO cartes(ID_C, description, serial, HW_version, SW_version) VALUES('','$description','$serial','$HW','$SW')"; 
     
    mysql_query($sql) or die('Erreur SQL dans la table Carte !'.$sql.'<br>'.mysql_error()); 
}
    $sql2 = "INSERT INTO equipements(ID_E, IP, marque, nom) VALUES('','$IP2','Motorola','$nom2')"; 
	mysql_query($sql2) or die('Erreur SQL dans la table Equipement !'.$sql.'<br>'.mysql_error()); 
    
    echo 'Vos infos on été ajoutées.'; 

    mysql_close();




voila bein le souci vien de la ligne
$select ="SELECT carte.ID_C FROM carte, equipements, relation WHERE relation.ID_E = equipements.ID_E and relation.ID_C = carte.ID_C or die('Erreur de liaison '.mysql_error())";


donc si qqun peut me dire d'ou viens le probleme ce serait tres tes gentil ;).

Mercii
Ajouter un commentaire
Réponse
+0
moins plus
hééého personne peut m'aider??? :(
Ajouter un commentaire
Réponse
+0
moins plus
upp
Ajouter un commentaire
Réponse
+0
moins plus
alors personne ????
aller svp je seche total là!!!
fras34 - 27 mai 2007 à 11:51
Salut,

qd on fait du code il faut savoir lire, lire et relire encore.
De monbreux classique vienne planter ton code.

les oublis et faute de frape sont les plus courrants. en particulier pour tout ce qui necessite une ouvertue et une fermeture.
ex: { } [ ] ( ) " " ' ' ....

Et là visibement c'est le cas. tu as oublié de fermer les ") de ta requete

A+
Ajouter un commentaire
Réponse
+0
moins plus
Je suis allé un peu vite.
	$select ="SELECT carte.ID_C FROM carte, equipements, relation WHERE relation.ID_E = equipements.ID_E and relation.ID_C = carte.ID_C or die('Erreur de liaison '.mysql_error())";

c'est du n'importe quoi!

faut aussi lire les documentations; celle de php est très bien faite.
donc aucune excuse.

or die('Erreur de liaison '.mysql_error())

s'execute à la suite de l'echec de la requete mysql.

mysql_query("..") or die("..");
Ajouter un commentaire
Ce document intitulé « [mysql] Lier 2 tables » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Windows 8 - À quoi s'attendre ?