Citat:
Originalno napisao webarto
PHP kôd:
SELECT r.id FROM resources r LEFT JOIN resource_attributes a_6 ON r.id = a_6.resource_id AND a_6.attribute_id = 6 LEFT JOIN resource_attributes a_8 ON r.id = a_8.resource_id AND a_8.attribute_id = 8 WHERE a_6.attribute_value LIKE 'La%' AND a_8.attribute_value LIKE 'Ho%'
|
Ako je ovo u pitanju - da su ti potrebni podaci iz tabele
resources, a podaci iz tabele
resource_attributes služe samo za uslov, onda ovoj tabeli nije mesto u FROM već u WHERE. Ovako bih ja uradio ovo što si ti iznad:
Kôd:
SELECT r.id
FROM resources r
WHERE
2 = ( SELECT COUNT(*) FROM resource_attributes ra
WHERE
ra.resource_id = r.id
AND
( attribute_value LIKE '%La%' AND attribute_id = 6
OR
attribute_value LIKE '%Ho%' AND attribute_id = 8))
Ako tabela
resource_attributes nije velika i uslov sadrži samo nekoliko atributa, onda je svejedno kako ćeš uraditi (sa JOIN ili ovako). Ali, junction tabele uglavnom sadrže stotine hiljada zapisa (resources x atributes), pa ako se pretraga vrši po malo više atributa, onda će JOIN napraviti set sa milionima zapisa i performanse će biti lošije.