Jointure sur plusieurs champ ? [PHP] - PHP - Programmation
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à
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
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.
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.
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 ?
Marsh Posté le 02-02-2011 à 11:47:09
J'ai pas de MCD... 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 ?
Marsh Posté le 02-02-2011 à 14:08:00
bko a écrit : |
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 ?
Les pc ont forcément un logiciel ? Et les logiciels sont forcément sur un pc ?
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 ?
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. |
Bah il faudrait faire ça propre justement, faudrait faire un mcd
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
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.
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
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.
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