2010-10-08 5 views
0

Voici une requête SQL que j'ai légèrement nettoyée (uniquement les noms de colonne/table/base de données). J'ai gardé la structure comme la production. C'est une requête extraite de mon journal MySQL.La requête SQL ne renvoie pas les résultats attendus

SELECT  master.pk AS pk, 
      master.vendor_id AS vendorId, 
      master.vendor_text AS vendorName, 
      master.device_id AS deviceId, 
      master.device_did AS deviceDid, 
      master.device_text AS deviceName, 
      master.class_id AS classId, 
      master.class_text AS className, 
      master.oem_id AS oemId, 
      master.oem_did AS oemDid, 
      master.oem_text AS oemName, 
      master.oem_vendor_text AS oemVendor, 
      master.comment AS comment, 
      master.v1 AS v1, 
      master.v2 AS v2, 
      master.status AS status, 
      dev_mod_join.mod_text AS module 
FROM  master 
LEFT JOIN dev_mod_join 
     ON master.device_did = dev_mod_join.dev_id 
WHERE ( 
      master.device_text LIKE CONCAT("%", 'search term', "%") 
     OR master.vendor_text LIKE CONCAT("%", 'search term', "%") 
     OR master.oem_text LIKE CONCAT("%", 'search term', "%") 
     OR master.oem_vendor_text LIKE CONCAT("%", 'search term', "%") 
    ) 
GROUP BY master.vendor_text 
LIMIT  0, 25 

Pour une raison quelconque, cela renvoie uniquement un résultat par fournisseur. C'est étrange. Il peut y avoir plusieurs appareils par fournisseur. Si je recherche un fournisseur dont je sais qu'il contient beaucoup de périphériques, il retournera toujours un seul périphérique pour ce fournisseur (il renvoie également d'autres périphériques qui ont d'autres fournisseurs, mais quelque chose correspond au terme recherché, mais il ne donne qu'un vendeur).

Tout ce qui me manque, je pense qu'il a quelque chose à voir avec les "OR", mais d'après ce que je sais, cela ne devrait pas être le cas.

L'aide est appréciée, comme toujours.

EDIT: OMG, je l'ai peut-être juste compris. J'ai utilisé GROUP BY au lieu de ORDER BY.

Wow, regardé que pendant un certain temps et, comme 5 minutes SO et je l'obtiens

+2

Cette clause 'GROUP BY' serait illégal dans d'autres saveurs SQL. Je pense que vous devriez essayer de supprimer cela et de nous faire rapport. – bernie

+0

c'est effectivement ce que c'est. Je vous remercie. – Tim

Répondre

0

La requête semble être son pour la plupart, la seule partie qui semble suspect est le groupe par. Essayez-le avec une clause select in select au lieu de group by.

Comme ceci:

SELECT DISTINCT  
      master.pk AS pk, 
      master.vendor_id AS vendorId, 
      master.vendor_text AS vendorName, 
      master.device_id AS deviceId, 
      master.device_did AS deviceDid, 
      master.device_text AS deviceName, 
      master.class_id AS classId, 
      master.class_text AS className, 
      master.oem_id AS oemId, 
      master.oem_did AS oemDid, 
      master.oem_text AS oemName, 
      master.oem_vendor_text AS oemVendor, 
      master.comment AS comment, 
      master.v1 AS v1, 
      master.v2 AS v2, 
      master.status AS status, 
      dev_mod_join.mod_text AS module 
FROM  master 
LEFT JOIN dev_mod_join 
     ON master.device_did = dev_mod_join.dev_id 
WHERE ( 
      master.device_text LIKE CONCAT("%", 'search term', "%") 
     OR master.vendor_text LIKE CONCAT("%", 'search term', "%") 
     OR master.oem_text LIKE CONCAT("%", 'search term', "%") 
     OR master.oem_vendor_text LIKE CONCAT("%", 'search term', "%") 
    ) 
+0

ne peut pas encore accepter, mais c'est 100%. se débarrasser de GROUP BY, passé à ORDER BY et ajouté DISTINCT. Merci! – Tim

Questions connexes