[php/Mysql] requete à partir d'une requete

requete à partir d'une requete [php/Mysql] - PHP - Programmation

Marsh Posté le 24-11-2007 à 17:29:32    

Bonsoir,  
 
voici mon probleme :  
 
J'ai 2 tables :  
 
une table "logiciel" ( 2 colonnes : id,nomlogiciel) (la colonne logiciel contient le nom du logiciel)
une table "pc" (3 colonnes : id,nompc,listelogiciel) (la colonne listelogiciel contient un tableau au format serialize des ID des logiciels)
 
J'utilise mysql 3.23 & php 5.2.0
 
Exemple :  
 

Code :
  1. table logiciel :
  2. id      nomlogiciel
  3. 1       acrobat
  4. 2       autocad
  5. 3       iexplorer
  6. table pc :
  7. id    nompc     listelogiciel
  8. 1     PC1        a:7:{i:1;s:1:"1";i:2;s:1:"8";i:3;s:1:"3"..
  9. 2     PC2        a:6:{i:1;s:1:"4";i:2;s:1:"2";i:3;s:1:"3"...
  10. 3     PC3        a:3:{i:1;s:1:"1";i:2;s:1:"6";i:3;s:1:"3"...


 
 
J'arrive à récupérer la liste des PC qui ont tel logiciel en y spécifiant l'ID du logiciel :
Exemple avec l'id 120

Code :
  1. SELECT DISTINCT nompc FROM pc WHERE pc.logiciel LIKE "%:\"120\";%";


 
 
Mais si je veux récuperer la liste de tous les PC qui ont un logiciel qui commence par "A"
(en fait, utiliser le résultat de la requete :  
 

Code :
  1. SELECT logiciel.id FROM logiciel WHERE logiciel.nomlogiciel LIKE "A%";


 
Comment je peux lier les 2 requetes ? utiliser le résultat de la 2eme requete comme parametre dans la 1ere ???
 
je peux bien sur faire ca en php avec 2 requetes mais c'est pas tres optimisé
 
je seche sur ce problème.
 
Merci de me donner des pistes.
 


Message édité par steph10200 le 24-11-2007 à 17:48:48

---------------
--- Stéphane ---
Reply

Marsh Posté le 24-11-2007 à 17:29:32   

Reply

Marsh Posté le 02-12-2007 à 00:57:52    

Je pense qu'il y a une mauvaise conception à la base.
 
Il faudrait mieux avoir trois tables ici, 2 tables entités et 1 table relation:
 

Code :
  1. table LOGICIEL:
  2. id
  3. nomlogiciel
  4. table PC:
  5. id
  6. nompc
  7. table INSTALLATION:
  8. id_logiciel
  9. id_pc


 
Maintenant pour récupérer la liste de tous les PC qui ont un logiciel qui commence par "A", il suffit de faire:

Code :
  1. SELECT pc.nompc FROM pc INNER JOIN installation i ON pc.id=i.id_pc INNER JOIN logiciel l ON l.id=i.id_logiciel AND l.nomlogiciel LIKE 'A%'


 
Je te déconseille de mettre des champs sérialisés dans une table mais plutôt de bien conceptualiser la base dès le départ.


---------------
jouez gratuitement au hanjie, picross
Reply

Marsh Posté le 02-12-2007 à 01:06:22    

c'est tres exactement ce que j'ai fait.  
ca fonctionne tres bien.  
 
mais j'ai remarqué que ce genre de requetes nessessite un serveur relativement puissant pour avoir une réponse dans un temps correct. ( 25 seconde pour une requete sur 700 PC et 200 logiciels différents)
 

Reply

Sujets relatifs:

Leave a Replay

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