[RESOLU] Plusieurs "like" de suite + probleme jointure

Plusieurs "like" de suite + probleme jointure [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 21-02-2012 à 11:20:06    

Bonjour a tous,
 
Voila je vous explique ma problématique :
 
-J'utilise GLPI et pour me faire un rapport perso je cherche a remonter des infos :
 
      Nom Ordi | Os| licence Os | Version office
 
Dans ma base je vais avoir plusieur version d'office.
 
Mon but est de toutes les lister.
 
Pour l'instant mon code est :
 

Code :
  1. SELECT test_computers.name AS " Ordinateur" , test_operatingsystems.name AS "Os", test_computers.os_license_number AS "Licence Os", test_softwares.name AS "Version Office"
  2. FROM `test_computers_softwareversions`, test_computers, test_softwares,test_operatingsystems
  3. WHERE ( test_softwares.name LIKE  "Microsoft Office F%" OR test_softwares.name LIKE  "Microsoft Office 2000" )
  4. AND test_softwares.id = `softwareversions_id`
  5. AND  test_operatingsystems.id = test_computers.operatingsystems_id
  6. AND `computers_id`= test_computers.id
  7. ORDER BY test_computers.name


 
Sauf que le probleme c'est que ce code ne renvoie que les pc avec pour   test_softwares.name =  "Microsoft Office F%" et pas les autres valeur.
 
Si vous avez compris le probleme , ou est le beug ou le manque dans ma requete ?  
 
merci d'avance


Message édité par ichigo56 le 23-02-2012 à 09:21:00

---------------
«C'est ainsi, que périra le monde : dans la joie générale des gens spirituels qui croiront à une farce.»
Reply

Marsh Posté le 21-02-2012 à 11:20:06   

Reply

Marsh Posté le 22-02-2012 à 08:33:45    

up ?


---------------
«C'est ainsi, que périra le monde : dans la joie générale des gens spirituels qui croiront à une farce.»
Reply

Marsh Posté le 22-02-2012 à 09:11:51    

essayes :
WHERE ( (test_softwares.name LIKE  "Microsoft Office F%" ) OR (test_softwares.name LIKE  "Microsoft Office 2000" ) ) AND ...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-02-2012 à 09:43:38    

Merci c'est bien ça !!  
 
Mais je dois avoir un problème de jointure j'ai 32 résultats alors que je suis censé en avoir dans les 60 ....
 
Comment traduire cette requete avec une / des left join histoires de voir les tuples sans resultat et de peut etre avoir plus de resultat ?


---------------
«C'est ainsi, que périra le monde : dans la joie générale des gens spirituels qui croiront à une farce.»
Reply

Marsh Posté le 22-02-2012 à 10:08:41    

Question bête : pourquoi tu mets pas juste test_softwares.name LIKE  "Microsoft Office%" pour éviter le OR?
 
S'il te manque des enregistrements, c'est peut-être parce que certains champs de tes machines ne sont pas renseignés (ont une valeur NULL ou 0) comme la version du logiciel ou le type d'OS... Essayes de faire tes jointures avec des LEFT JOIN plutôt que des équi-jointures.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-02-2012 à 10:16:08    

Car mes valeur ne sont pas juste Microsoft office +année, y'a des Microsoft office 2010 Web app - Microsoft Office 2010sp1 etc .... donc moi je ne veux que la version office de base sans composants.
 
Je vais tester les left Join, mais normalement je devrais avoir les 60 resultat quand je regarde les tables sous phpmyadmin et que je filtre sur l'un ou l'autre des office j'en vois 30 de cuaque coter ...
 


---------------
«C'est ainsi, que périra le monde : dans la joie générale des gens spirituels qui croiront à une farce.»
Reply

Marsh Posté le 22-02-2012 à 11:17:17    

J'ai essayer de faire des left join mais n'etant pas habituer a cette syntaxe je n'arrive pas a faire mes requetes :
 

Code :
  1. SELECT glpi_computers.name AS " Ordinateur", glpi_operatingsystems.name AS "Os", glpi_computers.os_license_number AS "Licence Os"
  2. FROM glpi_computers
  3. LEFT JOIN glpi_operatingsystems ON glpi_operatingsystems.id = glpi_computers.operatingsystems_id
  4. LEFT JOIN glpi_softwareversions ON glpi_softwareversions.computers_id=glpi_computers.id
  5. LEFTJOIN glpi_softwares ON glpi_softwares.id=glpi_computers_softwareversions.softwareversions_id
  6. ORDER BY glpi_computers.name


 
NE fonctionne j'ai une erreur sur la derniere left join ...
Un aperçu des tables ça peux aider :
http://s4.noelshack.com/uploads/im [...] tables.png


---------------
«C'est ainsi, que périra le monde : dans la joie générale des gens spirituels qui croiront à une farce.»
Reply

Marsh Posté le 22-02-2012 à 11:29:44    

ben forcément, t'as oublié un espace entre left et join :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-02-2012 à 11:47:45    

Oui donc je suis un blaireau sur ce coup-_-.

 

Mais meme avec left join j'ai le probleme, je n'ais pas le bon nombre de resultat :/

 
Code :
  1. SELECT glpi_computers.name AS " Ordinateur", glpi_operatingsystems.name AS "Os", glpi_computers.os_license_number AS "Licence Os", glpi_softwares.name AS "Office Version"
  2. FROM glpi_computers
  3. LEFT JOIN glpi_operatingsystems ON glpi_operatingsystems.id = glpi_computers.operatingsystems_id
  4. LEFT JOIN glpi_computers_softwareversions ON glpi_computers_softwareversions.computers_id=glpi_computers.id
  5. LEFT JOIN glpi_softwares ON glpi_softwares.id=glpi_computers_softwareversions.softwareversions_id
  6. ORDER BY glpi_computers.name


et normalement avec le sjointures je devrais voir les machines qui n'ont pas d'office installer mais non


Message édité par ichigo56 le 22-02-2012 à 14:05:58

---------------
«C'est ainsi, que périra le monde : dans la joie générale des gens spirituels qui croiront à une farce.»
Reply

Marsh Posté le 23-02-2012 à 09:20:33    

Bonjour à tous j'ai reussi a faire ma requete comme je le voulais :
 

Code :
  1. SELECT DISTINCT glpi_computers_softwareversions.softwareversions_id , `glpi_computers`.`name` AS compname, `glpi_computers`.`id` AS cID, glpi_operatingsystems.name AS OSID, `glpi_computers`.os_license_number AS OsLicence,`glpi_softwareversions`.`name` AS version, glpi_softwares.name AS "Version Name"
  2. FROM `glpi_computers_softwareversions`
  3. INNER JOIN `glpi_softwareversions` ON (`glpi_computers_softwareversions`.`softwareversions_id` = `glpi_softwareversions`.`id`)
  4. INNER JOIN `glpi_computers` ON (`glpi_computers_softwareversions`.`computers_id` = `glpi_computers`.`id`)
  5. INNER JOIN glpi_operatingsystems ON (glpi_operatingsystems.id= glpi_computers.operatingsystems_id )
  6. LEFT JOIN `glpi_entities` ON (`glpi_computers`.`entities_id` = `glpi_entities`.`id`)
  7. LEFT JOIN `glpi_locations` ON (`glpi_computers`.`locations_id` = `glpi_locations`.`id`)
  8. LEFT JOIN `glpi_states` ON (`glpi_computers`.`states_id` = `glpi_states`.`id`)
  9. LEFT JOIN `glpi_groups` ON (`glpi_computers`.`groups_id` = `glpi_groups`.`id`)
  10. LEFT JOIN `glpi_users` ON (`glpi_computers`.`users_id` = `glpi_users`.`id`)
  11. LEFT JOIN glpi_softwares ON (glpi_softwares.id=glpi_softwareversions.softwares_id)
  12. WHERE ((`glpi_softwareversions`.`softwares_id` = '542') OR (`glpi_softwareversions`.`softwares_id` = '821') OR (`glpi_softwareversions`.`softwares_id` = '160'))
  13. ORDER BY `compname` ASC LIMIT 0,100


 


---------------
«C'est ainsi, que périra le monde : dans la joie générale des gens spirituels qui croiront à une farce.»
Reply

Sujets relatifs:

Leave a Replay

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