J'ai la requête suivante que j'ai besoin de convertir en Joomla en utilisant JDatabase
. Cette requête s'exécute comme prévu dans phpMyAdmin.
SELECT `id`, DATE_FORMAT(`estEventDate`, '%b %Y') AS estDate, COUNT(`id`) AS cnt FROM `jdev_events` GROUP BY estDate ORDER BY estDate DESC
J'ai essayé de nombreuses manières différentes, mais sans succès. Le premier problème que j'ai rencontré était que je ne peux pas alias la fonction mais seulement le champ dans le $db->quoteName()
.
$query->selcet(array($db->quoteName('id'), 'DATE_FORMAT(' . $db->quoteName('estEventDate') . ', "%b %Y")' . ' AS estDate', 'COUNT(' . $db->quoteName('id') . ') as cnt'));
Mais même si je supprime les pseudonymes ...
$query->selcet(array($db->quoteName('id'), 'DATE_FORMAT(' . $db->quoteName('estEventDate') . ', "%b %Y")', 'COUNT(' . $db->quoteName('id') . ')'));
ça ne marche pas.
Ensuite, j'ai essayé de définir l'objet SELECT en tant que chaîne:
$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');
Voici les entrées du journal:
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 :
Je n'ai plus d'idées.
Je vois des erreurs de frappe mineures dans chacune de vos tentatives de codage (noms de méthodes mal orthographiées: selcet
et loadObjectLsit
).
Écrivez l'ordre GROUP BY comme suit: ( lien de référence )
SELECT id, DATE_FORMAT(estEventDate, '%b %Y') AS estDate, COUNT(id) AS cnt
FROM #__events
GROUP BY estDate DESC
Implémentez comme suit: (aucun appel de devis n'est nécessaire pour votre requête)
$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
}