web-dev-qa-db-ja.com

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 :
_

アイデアが足りません。

3
mixahlos

コーディングの試行ごとにマイナーなタイプミスが見られます(スペルミスのあるメソッド名: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

}
4
mickmackusa