Portál AbcLinuxu, 6. května 2024 14:09


Dotaz: Pomoc s query

12.8.2010 13:30 eth4rendil | skóre: 13
Pomoc s query
Přečteno: 280×
Odpovědět | Admin
Dobrý deň,

Chcel by som Vás požiadať o pomoc s nasledujúcou MySQL query :

jedna sa o query pre aukciu, ktorá bude zobrazovať názov tovaru, aktuálnu cenu a čas do konca aukcie. data sú v troch tabulkach z tab tovar stačí iba názov tovaru, z app_aukcia všetko, a z app_aukcia_bids potrebujem sum(bid) konkretneho riadku z app_aukcia.

na mojej query je niečo zle - zobrazuje iba tie aukcie kde už boli neaké bidy, ak nie su tak sa riadok nezobrazí.
SELECT
timediff(now(), a.close_time) AS estimate
, p.nazov_t,
a.start_price,
a.start_price+sum(b.bid) AS actprice,
a.*
FROM app_aukcia a
right join tovar p ON
a.id_tovar=p.id
JOIN app_aukcia_bids b ON
b.id_aukcia=a.id
WHERE a.closed='n' 
ORDER BY close_time DESC;
ďakujem pekne

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.8.2010 13:51 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Pomoc s query
Odpovědět | | Sbalit | Link | Blokovat | Admin
left OUTER join app_aukcia_bids
nebo mozna right outer, s timhle vzdycky trochu bojuju :-)
Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
12.8.2010 13:59 eth4rendil | skóre: 13
Rozbalit Rozbalit vše Re: Pomoc s query
ďakujem to som už skúšal ale stále vypíše iba ten záznam, ktorý ma neaký ten bid.. keď to dám bez toho joinu na app_aukcia_bids a bez sum(b.bid) tak sa zobrazia všetky záznamy, takže problém bude na 100% vtom joine
12.8.2010 14:08 eth4rendil | skóre: 13
Rozbalit Rozbalit vše Re: Pomoc s query
trochu som to zjednodušil aby to bolo prehladnejšie:
SELECT
SUM(b.bid) AS spolu,a.*
FROM app_aukcia a
LEFT OUTER JOIN app_aukcia_bids b on
b.id_aukcia=a.id
WHERE a.closed='n'
ORDER BY close_time DESC;
teraz sa to správa tak isto, teda zobrazuje iba riadky, pri ktorých je v druhej tabulke bid
Řešení 1× (eth4rendil (tazatel))
default avatar 12.8.2010 20:59 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: Pomoc s query
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příloha:
Předem se omlouvám za hrubší reakci, ale výchova musí být. :-D

Hned na úvod musím s politováním konstatovat, že dotaz nikdy fungovat nebude, protože je prostě špatně napsaný.

Proč?

Tak zaprvé: klíčové slovo OUTER nemá na vykonávání joinů vliv; je prostě nepovinné. :-)

Zadruhé: Rozdíl mezi LEFT [ OUTER ] JOIN a RIGHT [ OUTER ] JOIN: Dotaz, který uvádíš, je chybný z principu věci. Chybí ti totiž GROUP BY klauzule, byť MySQL (a potažmo i do určité míry i SyBase ASE) ji odpouští. To ale na věci nic nemění. Uvádět se má. Když ji vynecháš, databáze si groupuje jak chce — to znamená, že ztrácíš kontrolu.

OK, rozeberme si ten dotaz: Další užitečná informace je, že agregační funkce pracují s hodnotami NULL stejně jako operátory. To znamená, že 1 + NULL je prostě NULL. A i tak SUM() NULLů je NULL. Takže když k NULLu vráceným agregační funkcí přičteš konstantu, výsledek je NULL. NULLový výstup agrgační funkce se tedy musí převést na nějakou hodnotu.

Tím končím.

V příloze máš skript (ano, pro Oracle, protože tu nic jiného nemám), který by ti mohl být užitečný. Víc dát nemůžu, protože jsi neposkytnul testovací data.

P.S.: V diskuzi uvádíš, že ti nefunguje ani dotaz jen nad tabulkami aukcí a přihozeními. Zkontroluj si integritu dat. Tyhle primitivní spojení fungují i v Excelu a Accessu!
16.8.2010 09:10 eth4rendil | skóre: 13
Rozbalit Rozbalit vše Re: Pomoc s query
Ďakujem veľmi pekne,

presne takéto niečo som potreboval, queryna mi už samozrejme funguje.

default avatar 16.8.2010 20:56 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: Pomoc s query
Jsem rád, že jsem pomohl. :-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.