Autor Zpráva
nethor
Profil
Prosím o radu:
Mám tabulky
obchod (...,var_s,id_prodejce,id_kupujici,status, ...)
a
hodnoceni_obchodu (..., id_obchodu, id_hodnotitele , fce_hodnotitele , hodnoceni , ...)

do hodnoceni_obchodu se zapisuje záznam až když je obchod.status='odesláno'.

Potřeboval bych z nich vytáhnout obchody , které uživatel ještě neohodnotil .
to znamená , že v hodnoceni_obchodu buď není záznam s odpovídajícím id_obchodu (obchod.var_s != hodnoceni_obchodu.id_obchodu )
nebo v ní zázn. s odpovídajícím id_obchodu je, ale liší se id_hodnotitele


Tento dotaz mi nefunguje (trápím se stím celý den)
(vypisuje obchody, kterých se uživatel (v příkladu id=7) účastnil, dokud je neohodnotí oba):

select * from `obchod`,`hodnoceni_obchodu` where 
(`obchod`.id_prodejce = 7 && `obchod`.status = 'odesláno' && 
(`hodnoceni_obchodu`.id_obchodu != `obchod`.var_s || 
( `hodnoceni_obchodu`.id_obchodu = `obchod`.var_s && `hodnoceni_obchodu`.id_hodnotitele != `obchod`.id_prodejce ))) || 

(`obchod`.id_kupujici = 7 && `obchod`.status = 'odesláno' && 
(`hodnoceni_obchodu`.id_obchodu != `obchod`.var_s || 
( `hodnoceni_obchodu`.id_obchodu = `obchod`.var_s && `hodnoceni_obchodu`.id_hodnotitele != `obchod`.id_kupujici ))) 
group by `obchod`.var_s


Nevíte prosím, jak to napsat lépe?
TomášK
Profil
Co něco takového? Nejsem si jistý, jestli jsou podmínky správně.
SELECT 
    *
FROM 
    obchod 
    LEFT JOIN hodnoceni_obchodu ON 
        hodnoceni_obchodu.obchod_id = obchod.id AND 
        hodnoceni_obchodu.id_hodnotitele = 7
WHERE 
    (obchod.id_prodejce = 7 OR obchod.id_kupujici = 7) AND
    obchod.status = 'odesláno' AND
    hodnoceni_obchodu.id IS NULL
nethor
Profil
TomášK:
Tento dotaz se chová uplně stejně.
Tj, vypisuje i obchody, které už uživatel hodnotil. (dokud je neohodnotí i druhý.)

Celkem nechápu proč, připadá mi to v obou případech formulované správně.
TomášK
Profil
nethor:
Opravil jsem ten dotaz - změnil nerovnost na rovnost v podmínce JOIN.
nethor
Profil
TomášK:
Ne, nefunguje. Stále stejný výsledek.
I když nechápu proč.
Díky za snahu, asi to budu muset obejít, dodělám so tab. obchod 2 pomocné dloupce kodnocení prod. a kodnocení kup. (0/1)
Z hlediska MySQL je to asi prasárna, ale nevím , jak jinak to řešit.

Ještě jednou dík za snahu.
Kajman_
Profil *
To samé se bude moci zapsat přibližně jako

select o.*
from   `obchod` o
where  (o.id_prodejce = 7 OR o.id_kupujici = 7)
       and o.status = 'odesláno'
       and o.var_s not in (select h.id_obchodu
                           from   `hodnoceni_obchodu` h
                           where  h.id_hodnotitele = 7)

A není chyba třeba v tom, že id obchodu není ve sloupečku s názvem var_s?
nethor
Profil
Kajman:
Tohle vypadá, že funguje. Díky


A není chyba třeba v tom, že id obchodu není ve sloupečku s názvem var_s?
Asi ne, názvy sloupečků jsem při testování opravil.

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