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?
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).