Autor | Zpráva | ||
---|---|---|---|
Jakub0916 Profil * |
#1 · Zasláno: 10. 5. 2021, 17:34:36
Dobrý den, peru se se získáním dat a sejmutí nejvyšší hodnoty ze sloupce
$q = $db->query("SELECT *, MAX(price) AS maxPrice FROM back_product WHERE in_stock > 0 AND category IN ($categoryTreeUpIDs) AND active='1' /*LIMIT $offset, $per_page*/"); Je možné získat data a nejvyšší hodnotu ze sloupce při jedné query? - nějakou sub-query? Děkuji. |
||
Kajman Profil |
#2 · Zasláno: 10. 5. 2021, 18:01:01
Nejjednodušší to je, pokud umí databáze window funkce.
SELECT p.*, Max(price) OVER() AS maxPrice FROM back_product p WHERE in_stock > 0 AND category IN ( $categorytreeupids ) AND active = '1' Pokud ne, dělal bych to dvěma dotazy - i když to jde udělat poddotazem podobným tomuto SELECT p.*, (SELECT Max(price) FROM back_product WHERE in_stock > 0 AND category IN ( $categorytreeupids ) AND active = '1') AS maxPrice FROM back_product p WHERE in_stock > 0 AND category IN ( $categorytreeupids ) AND active = '1' A pokud není důležité pořadí, tak si to můžete seřadit podle price desc a pro maximum vzít první řádek. |
||
Jakub0916 Profil * |
#3 · Zasláno: 10. 5. 2021, 18:19:02
Kajman:
První dotaz nezvládne a druhý trvá opravdu dlouho, je lepší to vytáhnout dvěmi dotazy. Potřeboval jsem toto porovnání, mockrát děkuji, krásný zbytek dne :) |
||
Kajman Profil |
#4 · Zasláno: 11. 5. 2021, 08:44:35
Toto řešení by mělo znemožnit plánovači, aby počítal maximum pro každý řádek zvlášť. Ale pro přehlednost bych to nechal v těch dvou dotazech.
SELECT p.*, m.maxPrice FROM back_product p CROSS JOIN (SELECT Max(price) maxPrice FROM back_product WHERE in_stock > 0 AND category IN ( $categorytreeupids ) AND active = '1') m WHERE in_stock > 0 AND category IN ( $categorytreeupids ) AND active = '1' |
||
Časová prodleva: 3 roky
|
0