J'ai une table avec des donnéesrequête mySQL - sélectionnez conditionnelle
t1
------------------
id (int)
item_id (int)
item_description (text)
showHide (enum 0,1)
Normalement, je montre des résultats qui ont drapeau showhide réglé sur « 0 ». J'ai besoin de modifier la requête pour montrer aussi les résultats avec l'indicateur showHide mis à '1' si l'utilisateur a l'item_id correspondant dans une autre table, t2.
t2
------------------
id (int)
item_id (int)
usr_id (int)
Coincé ici, pas sûr comment faire:
SELECT item_description FROM t1
// get results with showHide = 0
// AND
// showHide = 1 if t1.item_id found in t2 WHERE usr_id = 123
Je ne vois pas comment «plus rusé» implique «moins performant». Je ne prétends pas que la deuxième solution pourrait être en fait pire (pas jusqu'à l'analyse comparative), mais ne vois pas la relation entre «trickiness» (un terme subjectif pour le moins) et performance. – Mchl
@Mchl: c'est ** moins ** performant parce que: 1) 'LEFT JOIN' (qui est plus lent que' INNER JOIN' 2) 'OR' avec champ 0/1 (puisque mysql ** n'a pas ** index de type bitmap) ne sera pas optimisé du tout (il sera fullscan dans tous les cas). – zerkms
@Mchl: la connexion entre 'trick' et' performance' dans mon esprit est la suivante: la requête la plus simple et la plus évidente fonctionne presque toujours mieux. Prouvé pour des années. – zerkms