Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem SQL dotaz - menší rozcvička

Ahoj.

Určitě to víte :-)

Mám následující dotaz:

select p.products_id, p.products_model, pd.products_name, m.manufacturers_name, p.products_quantity, 
    p.products_image, p.products_weight, p.manufacturers_id, p.products_tax_class_id, p.abra_unit, 
    final_price, order_count, view_count, abra_sc_id, abra_srm_id 
from listing_table_products p 
left join listing_table_products_name pd on p.products_id=pd.products_id 
left join listing_table_manufacturers m on p.products_id=m.products_id order by pd.products_name

A z tohoto dotazu, který už je defakto hotový potřebuji vytáhnout maximální cenu (final_price) a minimální cenu (final_price).
Toto je jednoduché (fce MIN a MAX). Já ovšem potřebuji k přislušné maximální a minimální ceně vytáhnout i její příslušné products_tax_class_id.

Jak to provést?

Díky

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
no tak ten dotaz nie je vobec defacto hotovy. chces tam prasnut funkciu min a max a nasledne groupov…
wam_Spider007 12.07.2013 10:58
wam_Spider007
Mě by stačilo, klidně to rozdělit na dotazy třeba 2. Hlavně , aby tam bylo MIN(final_price) a k němu…
Flash_Gordon 12.07.2013 11:02
Flash_Gordon
ten ERD diagram by teda nebol?
wam_Spider007 12.07.2013 14:15
wam_Spider007
Předně děkuji za ochotu. Diagram k tomu bohužel nemáme, takže nemůžu dodat :-). Zkouším to pomocí v…
Flash_Gordon 12.07.2013 14:28
Flash_Gordon
Taky nefunguje: select p.products_tax_class_id from listing_table_products p left join listing_tabl…
Flash_Gordon 12.07.2013 14:41
Flash_Gordon
uff, no v takom matrixe len tazko najdes chybu. trochu by to chcelo aj strukturovat, nech sa to da c…
wam_Spider007 12.07.2013 15:25
wam_Spider007
A proc, ze Ti nestačí to select p.products_tax_class_id,MAX(final_price) from listing_table_product…
AZOR 12.07.2013 18:13
AZOR
Ot:mě by spíš zajímalo proč je to kurna temporary tabulka To by byla dlouha historie. V kazdem prip…
Flash_Gordon 12.07.2013 18:47
Flash_Gordon
No dlouhá historie - jen jsem nakouk co to dělá v Mysql a je to to co v Oracle, pokud jsem koukal sp…
AZOR 12.07.2013 18:56
AZOR
OK. Otestuji to a pak vam dam vedet. Nepocital jsem s tim, ze to bude tak komplikovane. Zkouset to o… poslední
Flash_Gordon 13.07.2013 09:23
Flash_Gordon

no tak ten dotaz nie je vobec defacto hotovy. chces tam prasnut funkciu min a max a nasledne groupovat cez znacne mnozstvo poli, co je uplne zly postup. spravne je spravit si group potrebnych hodnot pre nejaky identifikator a potom k nemu dalej prijoinovat cez dane ID ostatne polia s popismi.
dalej ... nie je jasne z akej tabulke je pole final_price (chyba tam alias). a tiez polia order_count a podobne.
Zisiel by sa zjednoduseny ERD diagram aj s kardinalitou tychto tabuliek, lebo takto len tapame v tme.

Předně děkuji za ochotu. Diagram k tomu bohužel nemáme, takže nemůžu dodat :-).

Zkouším to pomocí vnořeného selectu, ale ten taky nefunguje:

select p.products_tax_class_id from listing_table_products p left join listing_table_products_name pd on p.products_id=pd.products_id left join listing_table_manufacturers m on p.products_id=m.products_id where final_price = (SELECT MAX(final_price) as maxcena from listing_table_products p left join listing_table_products_name pd on p.products_id=pd.products_id left join listing_table_manufacturers m on p.products_id=m.products_id order by pd.products_name)

Nevíte někdo proč ani toto nefunguje?

Taky nefunguje:

select p.products_tax_class_id from listing_table_products p left join listing_table_products_name pd on p.products_id=pd.products_id left join listing_table_manufacturers m on p.products_id=m.products_id where final_price = (SELECT MAX(final_price) as maxcena from listing_table_products p1 left join listing_table_products_name pd1 on p1.products_id=pd1.products_id left join listing_table_manufacturers m1 on p1.products_id=m1.products_id order by pd1.products_name)

Hlásí:

Could not run query: Can't reopen table: 'p'

uff, no v takom matrixe len tazko najdes chybu. trochu by to chcelo aj strukturovat, nech sa to da citat.
V ktorej tabulke je vlastne pole final_price?

select
 p.products_tax_class_id
from listing_table_products p

left join listing_table_products_name pd
   on p.products_id=pd.products_id

left join listing_table_manufacturers m
   on p.products_id=m.products_id

where final_price = (
      SELECT MAX(final_price) as maxcena
      from listing_table_products p1

      left join listing_table_products_name pd1
         on p1.products_id=pd1.products_id

      left join listing_table_manufacturers m1
         on p1.products_id=m1.products_id

      order by pd1.products_name
      )

A proc, ze Ti nestačí to

select
p.products_tax_class_id,MAX(final_price)
from listing_table_products p group by p.products_tax_class_id ?

Já Mysql rozumím jako koza petrželi, nicméně googlil jsem co to znamená ta chybová hláška Can not reopen, protože tenhle select je syntaticky validní, ačkoliv když se na něj podivám tak tam vidí zbytečné joiny, order by, které tam nemá co dělat a to = také není v souladu s tím, co chceš. Nicméně zpět k té chybě Can not reopen četl jsi co jsem vygooglil? Nemužeš dvakrát odkazovat stejnou temporary tabulk u - mě by spíš zajímalo proč je to kurna temporary tabulka

No dlouhá historie - jen jsem nakouk co to dělá v Mysql a je to to co v Oracle, pokud jsem koukal správně - data přežjívají jen session, tak jak v tom mohou být produkty? Pokud je to nějaký temp do kterého se to lije, tak to nahrad zdrojem (pokud výkon bude stačit) z hardwarové tabulky.

Zpět do poradny Odpovědět na původní otázku Nahoru