Bonjour,
Je cherche à optimiser la requête suivante (car le multi-select est lent) et je me demandais si vous pourriez m'aider sur ce coup ?
SELECT c.*, s.lastname AS slast, s.firstname AS sfirst, u.lastname AS ulast, u.firstname AS ufirst, m.title AS model, cf.file, ch.date AS lastUpdate FROM tableA AS c LEFT JOIN tableB AS u ON u.id=c.ownerId LEFT JOIN tableB AS s ON c.salemanId=s.id LEFT JOIN tableC AS m ON m.id=c.modelId LEFT JOIN tableD AS cf ON cf.carId=c.id AND cf.type="photo" AND cf.ordering=0 LEFT JOIN tableE AS ch ON ch.carId=c.id INNER JOIN tableF AS cmo ON c.id=cmo.carId WHERE c.deleted=0 AND c.type=0 AND (cmo.offerPrice = (SELECT MAX(offerPrice) FROM tableF WHERE carId=cmo.carId)) AND cmo.viewed=0 AND cmo.offerPrice>0 GROUP BY c.id ORDER BY id DESC LIMIT 0, 20
La partie en rouge, permet au lieu de retourner une ligne pour chaque nouvelle offre reçue, de ne récupérer les offres QUE si la dernière offre postée non vue (via cmo.viewed=0) est supérieur à ce qui a déjà été vu avant.
Votre aide est la bienvenue!
Merci.
Partager