it-swarm.com.de

Die Funktion COUNT (*) funktioniert in der SELECT-Abfrage nicht

Ich habe eine einfache SQL-Anweisung geschrieben, die die Anzahl der Kategorie-IDs in einer Tabelle zählt. Das Problem ist, dass es NULL zurückgibt.

$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);

Wenn ich COUNT(*) entferne, funktioniert die select-Anweisung normal. Was habe ich falsch geschrieben?

3
Navitua

Sie müssen quoteName aus Ihrer select -Klausel entfernen, damit es dann so aussieht:

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

Wenn Sie $db->quoteName() für ein Array verwenden, werden alle Array-Werte beim Rendern der Abfrage in Backticks eingeschlossen.

category_id Ist in Ordnung, Backticks über $db->quoteName() einzuschließen, da es sich um einen Spaltennamen handelt.

COUNT(*) ist eine MySQL-Funktion. Es verliert seine Bedeutung, wenn es in Backticks eingewickelt wird.

Ihre ursprüngliche Abfrage suchte nach einer Spalte namens COUNT(*) - was natürlich nicht korrekt (oder nicht verfügbar) ist.

1
Lodder