Joomlaのクエリメソッドを使用して、GROUP BYおよびORDER BYでクエリを作成する方法
JDatabase
を使用してJoomlaに変換する必要がある次のクエリがあります。 このクエリは、phpMyAdminで意図したとおりに実行されます。
_SELECT `id`, DATE_FORMAT(`estEventDate`, '%b %Y') AS estDate, COUNT(`id`) AS cnt FROM `jdev_events` GROUP BY estDate ORDER BY estDate DESC
_
私はさまざまな方法を試しましたが、うまくいきませんでした。最初に直面した問題は、関数のエイリアスを作成できず、$db->quoteName()
のフィールドのみをエイリアスできないことでした。
_$query->selcet(array($db->quoteName('id'), 'DATE_FORMAT(' . $db->quoteName('estEventDate') . ', "%b %Y")' . ' AS estDate', 'COUNT(' . $db->quoteName('id') . ') as cnt'));
_
しかし、エイリアスを削除しても...
_$query->selcet(array($db->quoteName('id'), 'DATE_FORMAT(' . $db->quoteName('estEventDate') . ', "%b %Y")', 'COUNT(' . $db->quoteName('id') . ')'));
_
それは動作しません。
次に、SELECTオブジェクトを文字列として設定しようとしました:
_$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select("`id`, DATE_FORMAT(`estEventDate`, '%b %Y') AS estDate, COUNT(`id`) AS cnt");
$query->from($db->quoteName('#__events'));
$query->group('estDate');
$query->order('estDate DESC');
$db->setQuery($query);
JLog::add('Query : ' . $query->__toString(), JLog::DEBUG, 'custom.field.estDate.getOptions');
$estDates = $db->loadObjectLsit();
JLog::add('EstDates' . print_r($estDates, 1), JLog::DEBUG, 'custom.field.estDate.getOptions');
_
ログエントリは次のとおりです。
_2018-11-06T00:37:36+00:00 DEBUG 127.0.0.1 custom.field.estdate.getOptions Query : SELECT `id`, DATE_FORMAT(`estEventDate`, '%b %Y') AS estDate, COUNT(`id`) AS cnt FROM `#__events` GROUP BY estDate ORDER BY estDate DESC 2018-11-06T00:37:36+00:00 DEBUG 127.0.0.1 custom.field.estdate.getOptions EstDates :
_
アイデアが足りません。
コーディングの試行ごとにマイナーなタイプミスが見られます(スペルミスのあるメソッド名:selcet
およびloadObjectLsit
)。
次のようにGROUP BYの順序を記述します:( 参照リンク )
SELECT id, DATE_FORMAT(estEventDate, '%b %Y') AS estDate, COUNT(id) AS cnt
FROM #__events
GROUP BY estDate DESC
そのように実装します:(クエリに引用呼び出しは必要ありません)
$db = JFactory::getDbo();
try {
$query = $db->getQuery(true)
->select("id, DATE_FORMAT(estEventDate, '%b %Y') AS estDate, COUNT(id) AS cnt")
->from("#__events")
->group("estDate DESC");
echo $query->dump();
$db->setQuery($query);
$resultset = $db->loadObjectList();
if (!$resultset) {
echo "No Rows In Resultset";
} else {
foreach ($resultset as $row) {
echo "<div>";
echo "<div>ID: {$row->id}</div>";
echo "<div>EstDate: {$row->estDate}</div>";
echo "<div>Count: {$row->cnt}</div>";
echo "</div>";
}
}
} catch (Exception $e) {
JFactory::getApplication()->enqueueMessage("Query Syntax Error: " . $e->getMessage(), 'error'); // never show to public
}