web-dev-qa-db-fra.com

La fonction COUNT (*) ne fonctionne pas dans la requête SELECT

J'ai écrit une instruction SQL simple qui compte le nombre d'ID de catégorie dans une table. Le problème, c'est qu'il retourne NULL.

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('category_id','COUNT(*)')));
$query->from($db->quoteName('#__eb_event_categories'))
      ->group($db->quoteName('category_id'));
$db->setQuery($query);
$results = $db->loadObjectList(); 
var_dump($results);

Lorsque je supprime COUNT(*), l'instruction select fonctionne normalement. Qu'est-ce que j'ai mal écrit?

3
Navitua

Vous devez supprimer quoteName de votre clause select pour qu'il ressemble à ceci:

$query->select(array('category_id','COUNT(*)'));

L'utilisation de $db->quoteName() sur un tableau encapsulera toutes les valeurs du tableau lors de l'exécution de la requête.

category_id Est correct pour enchaîner des backticks via $db->quoteName() parce que c'est un nom de colonne.

COUNT(*) est une fonction MySQL. Il perd son sens si enveloppé dans des backticks.

Votre requête initiale cherchait une colonne appelée COUNT(*) - qui n'est bien sûr pas correcte (ni disponible).

1
Lodder