DamnedHippie Posted November 28, 2013 Share Posted November 28, 2013 (edited) Bonjours, je viens de migrer un module que j'ai créé sur prestashop 1.4.4.1 vers une version 1.5.6.1 multiboutique. Quasiment tout est fonctionnel maintenant excepté qu'une requête générée automatiquement par mon onglet d'administration me renvoi un doublon. Je n'ai pas accés directement à la base de donnée en production mais par le biais de requêtes j'ai pu vérifier que la donée en question n'est pas en double dans la base. J'ai beaucoup de mal à trouver des informations sur le mecanisme multishop mais je le soupsconne fortement d'être impliqué (le site sur lequel je travail contenant deux boutiques). Je ne sais pas si ces informations seront suffisantes mais j'espère que ça éveillera une sensation de déjà vu chez quelqu'un... En espérant fournir quelques information complémentaires voici la requête générée par mon admintab (j'ai modifié temporairement la classe admintabcore pour qu'elle l'affiche): SELECT SQL_CALC_FOUND_ROWS a.*, a.id_supplier, b.id_order, concat(d.firstname,' ', d.lastname) as 'client', f.name, b.product_quantity, truncate(e.wholesale_price, 2) as wholesale, e.EAN13, e.reference, substring(c.date_add, 1, 10) as date, h.state_color as color FROM `ps_jit_order_detail_history` a JOIN `ps_order_detail` b ON a.id_order_detail=b.id_order_detail JOIN `ps_orders` c ON b.id_order=c.id_order JOIN `ps_customer` d ON c.id_customer=d.id_customer JOIN `ps_product` e ON b.product_id=e.id_product JOIN `ps_product_lang` f ON e.id_product=f.id_product && f.id_lang=1 JOIN `ps_jit_order_detail_state` h ON a.id_order_detail_state=h.id_order_detail_state WHERE 1 && a.change_date=(SELECT max(change_date) FROM `ps_just-in-time_order_detail_history` g WHERE a.id_order_detail=g.id_order_detail) && a.id_supplier=3 ORDER BY `date` DESC LIMIT 0,50 Et voici le résultat qui est un tableau comportant deux fois la même chose : array(2) { [0]=> array(16) { ["id_order_detail_history"]=> string(1) "4" ["id_order_detail"]=> string(2) "23" ["id_employee"]=> string(1) "8" ["id_order_detail_state"]=> string(1) "1" ["change_date"]=> string(19) "2013-11-28 11:51:07" ["id_supplier"]=> string(1) "3" ["comment"]=> NULL ["id_order"]=> string(1) "4" ["client"]=> string(14) "Obi Wan Kenobi" ["name"]=> string(56) "Produit 1" ["product_quantity"]=> string(2) "15" ["wholesale"]=> string(4) "4.50" ["EAN13"]=> string(13) "0000000000000" ["reference"]=> string(9) "ZZZ-25318" ["date"]=> string(10) "2013-11-28" ["color"]=> string(7) "#daceff" } [1]=> array(16) { ["id_order_detail_history"]=> string(1) "4" ["id_order_detail"]=> string(2) "23" ["id_employee"]=> string(1) "8" ["id_order_detail_state"]=> string(1) "1" ["change_date"]=> string(19) "2013-11-28 11:51:07" ["id_supplier"]=> string(1) "3" ["comment"]=> NULL ["id_order"]=> string(1) "4" ["client"]=> string(14) "Obi Wan Kenobi" ["name"]=> string(56) "Produit 1" ["product_quantity"]=> string(2) "15" ["wholesale"]=> string(4) "4.50" ["EAN13"]=> string(13) "0000000000000" ["reference"]=> string(9) "ZZZ-25318" ["date"]=> string(10) "2013-11-28" ["color"]=> string(7) "#daceff" } } Voilà, je doute que ces informations soient réellement suffisantes mais qui ne tente rien n'a rien... Merci à ceux qui prendront le temps de survoler mon problème. Edited November 29, 2013 by DamnedHippie (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted November 28, 2013 Share Posted November 28, 2013 Perso je mettrais SELECT * ... pour voir l'ensemble des champs et voir les différences entre ces 2 résultats, là on ne peut pas la voir. Si c'est un problème de id_shop (certainement le cas vu que tu as 2 boutiques et 2 résultats) si suffira de le rajouter dans les conditions Link to comment Share on other sites More sharing options...
DamnedHippie Posted November 28, 2013 Author Share Posted November 28, 2013 Merci d'avoir pris du temps pour m'aider... malheureusement cette requête est générée automatiquement (à partir des attribut _select, _join, _where etc de mon admintab) et commence déjà par select a.*. J'ai vérifié à la main dans mes tables (avec select *) et elles ne contiennent pas de doublons. Je vais quand même creuser cette histoire de boutique... sinon je devrais avoir les codes d'accès à la base de donnée demain. En tous cas merci encore... Link to comment Share on other sites More sharing options...
coeos.pro Posted November 28, 2013 Share Posted November 28, 2013 as tu essayé dans : Paramètres avancés > Gestionnaire SQL Link to comment Share on other sites More sharing options...
DamnedHippie Posted November 28, 2013 Author Share Posted November 28, 2013 Non je ne connaissais pas cette fonctionnalité... on dirait que c'est exactement ce qu'il me fallait! Je devrais m'en sortir avec ça. Je publierais ma solution quand je l'aurai trouvée. Merci! Link to comment Share on other sites More sharing options...
DamnedHippie Posted November 29, 2013 Author Share Posted November 29, 2013 Problème trouvé: il provenait indirectement du multishop. Ma jointure sur ps_product_lang est filtrée par la clause "ON e.id_product=f.id_product && f.id_lang=1" qui ne suffit plus en cas de multiboutique parce que le multiboutique permet de stocker un texte différent par langue et par boutique. C'est le fait que dans mon cas les textes sont les mêmes dans les deux boutiques qui m'a piegé. Je ne sais pas encore comment je vais solutionner ça parce que ma requête doit travailler sur les deux boutiques mais c'est un autre sujet et ça ne devrait pas trop poser de problèmes. Merci encore coeos.pro bonne continuation Link to comment Share on other sites More sharing options...
DamnedHippie Posted November 29, 2013 Author Share Posted November 29, 2013 Par contre je ne sais toujours pas comment signaler un topic comme résolu... si quelqu'un peu me dire... Link to comment Share on other sites More sharing options...
coeos.pro Posted November 29, 2013 Share Posted November 29, 2013 rajoute une ligne après "&& a.id_supplier=3" : AND f.`id_lang`=1 normalement ça devrait être bon Pour le résolu édite le premier message en sélectionnant l'éditeur complet et ensuite rajoute [resolu] dans le titre Link to comment Share on other sites More sharing options...
DamnedHippie Posted November 29, 2013 Author Share Posted November 29, 2013 id_lang=1 est déjà présent et renvoi une ligne par boutique. La solution que j'ai utilisé consiste à ne choisir que la première ligne renvoyée en cas de doublon (sans mettre id_shop=x parce que je souhaite avoir les résultats même s'ils viennent de boutique différente). Pour implémenter cette solution j'ai remplacé la jointure sur la table product_lang d'origine "JOIN `ps_product_lang` f ON e.id_product=f.id_product && f.id_lang=1" par celle-ci: JOIN `ps_product_lang` f ON e.id_product=f.id_product && f.id_lang=1 && f.id_shop=(SELECT id_shop FROM `ps_product_lang` h WHERE e.id_product=f.id_product && f.id_lang=1 LIMIT 1,1) Tout fonctionne trés bien maintenant... bonne continuation. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now