[PHP] Jointure sur plusieurs champ ?

Jointure sur plusieurs champ ? [PHP] - PHP - Programmation

Marsh Posté le 02-02-2011 à 10:13:47    

Bonjour,
 
je bute sur une requête qui me semble pourtant assez simple.
 
J'ai une table PC dans laquelle je souhaite indiquer les logiciel qui sont installé dessus.
J'ai donc crée des champs logiciel_id1, logiciel_id2, logiciel_id3, logiciel_id4 (en admettant 4 logiciel au max).
 
J'ai une table logiciel dans laquelle je liste mes logiciels.
 
Ma requête fonctionnelle :
 

$sql = "SELECT pc, serialnb,..., desc_logiciel
 FROM tablepc
 INNER JOIN tablelogiciel
 ON id_logiciel = logiciel_id1

 
Ma question, comment récupérer les logiciels correspondant à logiciel_id2, logiciel_id3, logiciel_id4 ? car si j'indique or logiciel_id2 or logiciel_id3 or logiciel_id4, il me duplique mes résultats.
 
merci

Reply

Marsh Posté le 02-02-2011 à 10:13:47   

Reply

Marsh Posté le 02-02-2011 à 10:46:02    

Citation :

J'ai donc crée des champs logiciel_id1, logiciel_id2, logiciel_id3, logiciel_id4 (en admettant 4 logiciel au max).


 
Ca me choque un peu ça déjà  [:tinostar]  
 
Tu devrais avoir l'id du logiciel dans la table pc. Et si un pc à plusieurs logiciels tu aura plusieurs lignes avec le même pc mais un id du logiciel différent.
 
Tu peux faire voir ton MCD histoire que je jette un oeil ? :)
 
Après je vais laisser les pro d'SQL te répondre  [:cupra]
 
Edit: En regardant ta requête y a qqchose qui me gène aussi, il faut lier tes tables grâce aux FK que tu as du créer.
 
Edit: Et normalement une jointure se fait entre deux tables et non pas sur des champs.


Message édité par Profil supprimé le 02-02-2011 à 11:09:22
Reply

Marsh Posté le 02-02-2011 à 11:10:58    

En effet, dans ma table PC, j'ai 4 champs :
logiciel_id1, logiciel_id2,logiciel_id3 ,logiciel_id4 qui sont des FK qui contiennent chacune un id correspondant à un id de logiciel dans ma table logiciel.
 
Edit : mon code est certainement bancal, je ne suis pas pro du tout.


Message édité par bko le 02-02-2011 à 11:11:24
Reply

Marsh Posté le 02-02-2011 à 11:26:28    

En fait je comprends pas pourquoi tu as autant de FK, une seule suffit.
 
Et si un pc à par exemple 3 logiciels, tu aura 3 ligne dans ta table avec le même nom de pc mais 3 id_logiciel différent.
 
Quelqu'un pourrait confirmer si je me trompe ou pas ?
 
PS: Tu peux faire voir ton mcd ? :)

Reply

Marsh Posté le 02-02-2011 à 11:47:09    

J'ai pas de MCD...  :sweat:  je travaille sous mysql, façon amateur...
 
Tu as saisi le truc en tout cas.
 
En fait je ne voudrais  pas avoir 3 lignes avec les mêmes infos ou juste le logiciel change à la fin.
Je voudrais une seule ligne de résultat avec a la fin mes 4 logiciels à la suite correspondant aux 4 champs qui sont crées dans la table pc.
 
Si j'essayais avec une seule FK dans la table PC que j'appellerais logiciel_id, comment est ce que je pourrais cumuler 4 logiciels différents avec 4 id différents dans un même champ ?

Reply

Marsh Posté le 02-02-2011 à 14:08:00    

bko a écrit :


En fait je ne voudrais  pas avoir 3 lignes avec les mêmes infos ou juste le logiciel change à la fin.
Je voudrais une seule ligne de résultat avec a la fin mes 4 logiciels à la suite correspondant aux 4 champs qui sont crées dans la table pc.


 
Ouais mais à vouloir faire un truc à ta sauce ça embrouille tout. Et puis imagine le jour où ton pc contient 100 logiciels, tu vas t'amuser à ajouter 100 champs à ta table ?  [:tinostar]  
 
Les pc ont forcément un logiciel ? Et les logiciels sont forcément sur un pc ?

Reply

Marsh Posté le 02-02-2011 à 14:16:01    

Mes pc auront la plupart des cas entre 1 et 4 logiciel spécifiques.
 
Alors oui, j'imagine que l'astuce de créer 1 champ par logiciel n'est pas la bonne solution, mais que faire alors ?

Reply

Marsh Posté le 02-02-2011 à 14:20:15    

bko a écrit :

Mes pc auront la plupart des cas entre 1 et 4 logiciel spécifiques.
 
Alors oui, j'imagine que l'astuce de créer 1 champ par logiciel n'est pas la bonne solution, mais que faire alors ?


 
Bah il faudrait faire ça propre justement, faudrait faire un mcd  :jap:  

Les pc ont forcément un logiciel ? Et les logiciels sont forcément sur un pc ?


 
Répond déjà à cette question qu'on puisse avancer te faire avancer  :jap:

Reply

Marsh Posté le 02-02-2011 à 15:53:03    

Ben ce que je veux est très simple :
 
afficher les données sur le PC (utilisateur, numero de serie...) et si un ou plusieurs logiciel spécifiques sont installés dessus. Donc on aura parfois aucun logiciel, parfois 4.

Reply

Marsh Posté le 02-02-2011 à 17:05:11    

3 tables:

 

ordinateur: id, utilisateur, numero_serie
ordinateur_logiciel: id_ordinateur, id_logiciel
logiciel : id, nom , ...

 

chercher tous les logiciels de l'ordinateur 1 :

 

select l.* from logiciel as l join ordinateur_logiciel on id=id_logiciel where id_ordinateur = 1

 

...

 

Si tu  veux les ordis et tous les logiciels en une requete :

 

select * from ordinateur o
left join ordinateur_logiciel ol on o.id=id_ordinateur
left join logiciel l on l.id=id_logiciel


Message édité par Alisteroid le 02-02-2011 à 17:08:18
Reply

Marsh Posté le 02-02-2011 à 17:05:11   

Reply

Marsh Posté le 03-02-2011 à 08:54:29    

Je vais essayer avec cette requête (je dois d'abord la comprendre).
Merci en tout cas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed