Bonjour,
Je vous présente mon contexte. J'ai une base de données contenant plusieurs tables :
- des articles (description,...)
- une table des champs de description des articles (idChamp, idArticle, Valeur)
- des catégories
- les relations entre catégories (relation parent enfant)
- les relations entre catégories et articles
- prix avec l'id sur l'article
- rabais par catégorie et par article > pour user (idArt, idCat, idUser, rabais)
Il y a peu de temps j'était incapable de faire autre chose qu'un SELECT FROM WHERE. Là j'ai lu les cours, et maintenant j'ai un (tout petit) peu avancé.
Pour ressortir les prix par article j'ai écrit cette requete qui fonctionne bien.
Ce qui est très important c'est de trier par ordre de prix :
1 2 3 4 5 6 7 8 9
| SELECT L.`id`,`date`,`idSobi`,`idUser`,`prix`, `username`, `title`, LOC.`data_txt` AS localite, LAT.`data_txt` AS latitude, LNG.`data_txt` AS longitude
FROM `#__pecSsListing` L
LEFT JOIN `#__sobi2_item` S ON L.idSobi = S.itemid
LEFT JOIN `#__users` U ON L.idUser = U.id
LEFT JOIN `#__sobi2_fields_data` LOC ON L.idSobi = LOC.itemid
LEFT JOIN `#__sobi2_fields_data` LAT ON L.idSobi = LAT.itemid
LEFT JOIN `#__sobi2_fields_data` LNG ON L.idSobi = LNG.itemid
{$where} AND LOC.fieldid = 3 AND LAT.fieldid = 25 AND LNG.fieldid = 24
ORDER BY prix ASC, id DESC {$limit} ;" ; |
Maintenant ma grande difficulté est d'y intégrer mes rabais. Ces dernier dépendent d'une table
RABAIS : id, idCat, idArticle (=idSobi), idUser, rabais
Ce que je peux faire, c'est 1. faire une boucle en code en recherchant pour chaque article le rabais, déduire ce dernier au prix, et retrier mon vecteur.
Pour récupérer les rabais j'ai ces requetes :
Rabais par article :
"SELECT `rabais` FROM `#__pecSsRabais` WHERE `idSobi`='{$idSobi}' AND `idUser`='{$my->id}' LIMIT 1"
Et par catégorie :
1 2 3 4 5 6 7 8
|
// recherche de la catégorie :
"SELECT I.`catid` FROM `#__sobi2_cat_items_relations` I LEFT JOIN `#__sobi2_cats_relations` R ON I.`catid`=R.`catid` WHERE `itemid` ='{$idSobi}' AND R.`parentid`='{$this->m_idCatParentFournisseurs}' LIMIT 1"
//requete ci dessus me donne idCatMarque
// recherche du rabais
$database->setQuery("SELECT `rabais` FROM `#__pecSsRabais` WHERE `idCat`='{$idCatMarque}' AND `idUser`='{$my->id}' LIMIT 1"); |
Je ne sais pas si quelqu'un a eu le courage de me lire jusqu'ici, si oui je suis conscient qu'il est difficile de se plonger dans un environnement complexe.
Questions :
- Est il possible de corriger ma requete de base en y ajoignant les 3 requetes suivantes
- Est il possible de faire 'une seconde passe' sur le résultat de ma première requete.
Merci de me donner quelques pistes.
ced_.
PS : je travaille sur un environnement existant, je ne peux pas modifier la structure.
Partager