単純なphpクエリをJDATABASE
が理解できるクエリに変換する必要があります。
次に例を示します。
_$resDays = 7; // On how many days to build the top?
$resLimit = 20; // How many results to display?
$query = "SELECT `artist`, title, count(*) AS tracks FROM `history
WHERE TIMESTAMPDIFF(DAY, `date_played`, NOW()) <= " . $resDays . "
AND `song_type`=0 GROUP BY title ORDER BY tracks DESC LIMIT 0," . $resLimit;
_
そして、これは私が何とかしてやったことです:
_// Create a new query object.
$query = $db->getQuery(true);
$query->select($db->quoteName(array('artist', 'title')));
$query->from($db->quoteName('history'));
$db->setQuery($query);
$query->setLimit(20);
$result = $db->loadObjectList();
_
問題は、_ORDER tracks
_やcount(*) AS tracks
などの欠落している部分をクエリに含める方法がわからないことです。
$query = $db->getQuery(true);
$query->select($db->quoteName(array('artist', 'title')));
$query->select('COUNT(*) AS tracks');
$query->from($db->quoteName('history'));
$query->where('TIMESTAMPDIFF(DAY, date_played, NOW()) <= ' . $db->quote($resDays));
$query->where('song_type = 0');
$query->group('title');
$query->order('tracks DESC');
// Set the query + limit
$db->setQuery($query, 0, $resLimit);
$ query-> dump();でクエリがどのように見えるかをテストできます。
API: https://api.joomla.org/cms-3/classes/JDatabaseQuery.html
_GROUP BY
_は->group(...)
を使用して実現でき、_ORDER BY
_は->order(...)
を使用して実現できます。
したがって、完全なクエリは次のようになります。
_$query = $db->getQuery(true)
->select(
array(
$db->quoteName('artist'),
$db->quoteName('title'),
'COUNT(*) AS ' . $db->quoteName('tracks')
)
)
->from($db->quoteName('history'))
->where('TIMESTAMPDIFF(DAY, ' . $db->quoteName('date_played') . ', NOW()) <= ' . $db->quote($resDays))
->where($db->quoteName('song_type') . ' = 0')
->group($db->quoteName('title'))
->order($db->quoteName('tracks') . ' DESC')
->setLimit(20);
$db->setQuery($query);
$result = $db->loadObjectList();
_
私があなたのために書いたwhere
句について完全に100%確信することはできません。テストを受け、それが機能するかどうか私に知らせてください。