Je construis un composant personnalisé dans Joomla 3.x. J'ai deux tables dans mon modèle:
table persons
id name
1 Peter
2 Paul
3 Mary
table cars
id personid make price
1 1 BMW 10,000
2 1 Audi 8,000
3 1 BMW 6,000
4 2 BMW 21,000
Maintenant, j'aimerais construire une requête renvoyant les personnes et leur BMW la moins chère:
Peter BMW 6,000
Paul BMW 21,000
Voici la déclaration MySQL que je peux trouver:
SELECT p.name, c.make, c.price
FROM persons AS p
LEFT JOIN cars AS c ON c.personid = p.id
Traduit en Joomla:
$db = $this->getDbo();
$query = $db->getQuery(true);
$query->select('p.name, c.make, c.price');
$query->from('#__persons AS p');
$query->join('LEFT', '#__cars AS c ON c.personid = p.id');
Mais évidemment, j’ai d’abord - avant JOINing
- besoin de filtrer Audi de Peter (WHERE c.make = 'BMW'
) et triez les BMW restantes en fonction de leur prix (ORDER BY c.price ASC
).
Mais comment? Je suis coincé là-dessus et j'ai vraiment besoin de conseils.
Si tout ce que vous voulez faire est d’ajouter la clause WHERE qui n’est pas différente de celle de toute autre requête DB Query for Joomla. Vous devrez regrouper les éléments en fonction de votre utilisateur et interroger le prix MIN. L'exemple ci-dessous devrait fonctionner pour vous. J'ai également inclus un lien SQL Fiddle ci-dessous).
$db = $this->getDbo();
$query = $db->getQuery(true);
$query->select('p.name, c.make, MIN(c.price)');
$query->from('#__persons AS p');
$query->join('LEFT', '#__cars AS c ON c.personid = p.id');
$query->where("c.make = 'BMW'");
$query->group('p.id');
J'ai modifié votre requête pour inclure le MIN (c.price). Notez que j'ai regroupé l'instruction par p.id au lieu de la commande par c.price ASC.
Vous pouvez voir les résultats de cette requête at this SQLFiddle