Je suis loin d'être un gourou mysql, j'ai donc besoin de savoir s'il existe un moyen de rendre cette requête plus rapide, plus courte et plus compacte.mysql short union
(SELECT DISTINCT(cfrm.nid), f.filename, n.title, n.created
FROM content_field_raamatu_marksonad cfrm
LEFT JOIN node n ON (n.nid = cfrm.nid)
LEFT JOIN content_field_kaanepilt cfk ON (cfk.nid = n.nid)
LEFT JOIN files f ON (f.fid = cfk.field_kaanepilt_fid)
WHERE n.type = 'raamat'
AND n.status = 1
AND cfrm.field_raamatu_marksonad_value IN (102, 3348))
UNION
(SELECT DISTINCT(cfrt.nid), f.filename, n.title, n.created
FROM content_field_raamatu_teema cfrt
LEFT JOIN node n ON (n.nid = cfrt.nid)
LEFT JOIN content_field_kaanepilt cfk ON (cfk.nid = n.nid)
LEFT JOIN files f ON (f.fid = cfk.field_kaanepilt_fid)
WHERE n.type = 'raamat'
AND n.status = 1
AND cfrt.field_raamatu_teema_value = 1342)
ORDER BY `created` DESC
1. union (par opposition à union tout) fait un tri distinct, de sorte que vous n'avez pas besoin de la distincte dans chaque clause select. 2. vous êtes joint extérieurement au noeud et pourtant vous appliquez des prédicats à n.type et à n.status - la jointure externe est donc inutile –