Autor Zpráva
Monkeys
Profil *
TB PRODUKT_ATRIBUTY

id_atributu | id_produktu | cena_dph | cena_bez_dph
3 | 80 | ....
8 | 80 | ...
7 | 80 | ...
9 | 80 | ...
3 | 81 | ...
8 | 81 | ...
7 | 81 | ...
9 | 81 | ...

Problem je ze ak mam viac produktov s rovnakym id_atributu tak to vyberie aj tie atributy ktore patria inemu produktu.
Napr vstup:

Array ( [80] => Array ( [mnozstvo] => 1 [atribut] => 7 ) [81] => Array ( [mnozstvo] => 1 [atribut] => 8 ) )

a sql je


"SELECT p.id_produktu, p.produkt, p.url_produktu, p.predajna_cena, p.cena_bez_dph AS cena_no_dph, p.obrazok,
            a.hodnota_atributu, pa.cena_dph AS atribut_cena, pa.cena_bez_dph AS atribut_no_dph
            FROM produkty p
            LEFT JOIN produkt_atributy pa ON pa.id_produktu=p.id_produktu
            LEFT JOIN atributy a ON a.id_atributu=pa.id_atributu
            WHERE
            ".((count($attr) > 0) ? '
            IF(pa.id_atributu IS NULL,
                         p.id_produktu IN ('.implode(",", array_map("intval",array_keys($session))).'),
                         pa.id_produktu IN ('.implode(",", array_map("intval",array_keys($session))).') 
                         AND pa.id_atributu IN ('.implode(",", array_map("intval",$attr)).')
                         '
            : 'p.id_produktu IN ('.implode(",", array_map("intval",array_keys($session))) ).")
            ORDER BY p.produkt DESC";

vybere to

80 => 7
80 =>8
81 => 7
81 =>8

Neviem ako to osetrit aby to vybralo len 2 produkty s rozdielnym id:atributu

vdaka
M.
juriad
Profil
změň:
'... pa.id_produktu IN ('.implode(",", array_map("intval",array_keys($session))).') 
                         AND pa.id_atributu IN ('.implode(",", array_map("intval",$attr)).') ...'
na:
'... (pa.id_produktu, pa.id_atributu) IN ((80, 7), (81, 8)) ...'
Chceš hledat dvojice, nikoli každý zvlášť. Ty imploady se ti ztíží, raději si pro to udělej extra funkci.
monkeys
Profil *
juriad:
Ok dakujem pekne

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0