2010-09-27 2 views
0

Comment utiliser correctement le regroupement dans cette requête:comment mettre GROUP BY correctement?

$sQuery = "SELECT id,DATE(A.Inspection_datetime) AS Date, 
           A.Model, COUNT(A.Serial_number) AS Qty, 
           B.name 
         FROM inspection_report AS A 
         LEFT JOIN Employee AS B 
         ON A.NIK=B.NIK 
         GROUP BY Date, B.name".$sWhere.$sOrder.$sLimit; 

je suis vraiment nouveau dans concaténation.

Répondre

0

Vous devez GROUP BY à la fois « id » et « A.Model » aussi, au moins dans la plupart des SGBD SQL (MySQL a des règles laxistes dans ce domaine). Vous devez GROUP BY pour venir après la clause WHERE et avant la clause ORDER BY. Par conséquent:

$sGroupBy = " GROUP BY id, Date, A.Model, B.Name "; 
$sQuery = "SELECT id,DATE(A.Inspection_datetime) AS Date, 
          A.Model, COUNT(A.Serial_number) AS Qty, 
          B.name 
        FROM inspection_report AS A 
        LEFT JOIN Employee AS B 
        ON A.NIK=B.NIK " . 
        $sWhere.$sGroupBy.$sOrder.$sLimit; 

Notez que vous devez vous assurer qu'il ya des espaces pour séparer les différentes clauses que vous concaténer ensemble; J'ai ajouté un espace à chaque extrémité de $sGroupBy (et après B.NIK) pour m'assurer que cette partie était OK.

+0

quelle est la fonction de l'espace sur concat? avez-vous le site du tutoriel pour la concaténation? Je veux en savoir plus. – klox

+0

Le point clé sur les espaces est de vous assurer que vous n'avez pas 'A.NIK = B.NIKWHERE B.EmpID = 13GROUP PAR id ... B.NameORDER PAR DateLIMIT 10' - où les mots-clés sont en cours d'exécution dans la précédente jeton, conduisant à des erreurs de syntaxe. Je n'ai pas de référence en ligne pour vous montrer - désolé. –