it-mot-dan-vi.com

Làm cách nào để viết một truy vấn với GROUP BY và ORDER BY bằng các phương thức truy vấn của Joomla?

Tôi có truy vấn sau đây mà tôi cần chuyển đổi sang Joomla bằng cách sử dụng JDatabase. Truy vấn này thực thi như dự định trong phpMyAdmin.

SELECT `id`, DATE_FORMAT(`estEventDate`, '%b %Y') AS estDate, COUNT(`id`) AS cnt FROM `jdev_events` GROUP BY estDate ORDER BY estDate DESC

Tôi đã thử nhiều cách khác nhau, nhưng không có may mắn. Vấn đề đầu tiên tôi gặp phải là tôi không thể đặt bí danh cho hàm mà chỉ có trường trong $db->quoteName().

$query->selcet(array($db->quoteName('id'), 'DATE_FORMAT(' . $db->quoteName('estEventDate') . ', "%b %Y")' . ' AS estDate', 'COUNT(' . $db->quoteName('id') . ') as cnt'));

Nhưng ngay cả khi tôi xóa bí danh ...

$query->selcet(array($db->quoteName('id'), 'DATE_FORMAT(' . $db->quoteName('estEventDate') . ', "%b %Y")', 'COUNT(' . $db->quoteName('id') . ')'));

nó không hoạt động.

Sau đó, tôi đã cố gắng đặt đối tượng SELECT dưới dạng chuỗi:

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

Dưới đây là các mục nhật ký:

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 :

Tôi không có ý kiến.

3
mixahlos

Tôi thấy các lỗi chính tả nhỏ trong mỗi lần thử mã hóa của bạn (tên phương thức sai chính tả: selcetloadObjectLsit).

Viết thứ tự NHÓM THEO như vậy: ( Liên kết tham khảo )

SELECT id, DATE_FORMAT(estEventDate, '%b %Y') AS estDate, COUNT(id) AS cnt
FROM #__events
GROUP BY estDate DESC

Thực hiện như vậy: (không có cuộc gọi trích dẫn nào là cần thiết cho truy vấn của bạn)

$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