Pogledajte određenu poruku
Staro 25. 06. 2011.   #11
dacha
profesionalac
Qualified
 
Datum učlanjenja: 23.06.2005
Poruke: 196
Hvala: 35
35 "Hvala" u 30 poruka
dacha is on a distinguished road
Default

Citat:
Originalno napisao webarto Pogledajte poruku
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.
dacha je offline   Odgovorite uz citat