Autor | Zpráva | ||
---|---|---|---|
nethor Profil |
#1 · Zasláno: 4. 2. 2011, 16:18:06 · Upravil/a: nethor
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 |
#2 · Zasláno: 4. 2. 2011, 16:36:37 · Upravil/a: TomášK
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 |
#3 · Zasláno: 4. 2. 2011, 16:53:48
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 |
#4 · Zasláno: 4. 2. 2011, 17:11:25
nethor:
Opravil jsem ten dotaz - změnil nerovnost na rovnost v podmínce JOIN. |
||
nethor Profil |
#5 · Zasláno: 4. 2. 2011, 23:22:32
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 * |
#6 · Zasláno: 5. 2. 2011, 12:25:21
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 |
#7 · Zasláno: 5. 2. 2011, 17:29:02
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. |
||
Časová prodleva: 13 let
|
0