web-dev-qa-db-ja.com

COUNT(*)関数がSELECTクエリで機能しない

テーブル内のカテゴリIDの数をカウントする簡単なSQLステートメントを記述しました。問題は、それが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);
_

COUNT(*)を削除すると、selectステートメントは正常に動作します。何を間違って書いたのですか?

3
Navitua

quoteNameselect句から削除する必要があるため、次のようになります。

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

配列で$db->quoteName()を使用すると、クエリがレンダリングされるときにすべての配列値がバックティックでラップされます。

_category_id_は列名であるため、$db->quoteName()を介してバックティックでラップしても問題ありません。

COUNT(*)はMySQL関数です。バッククォートに包まれると意味を失います。

元のクエリはCOUNT(*)という列を探していましたが、もちろんこれは正しくありません(または使用できません)。

1
Lodder