• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapytanie SQL, GROUP BY, podwójne kategorie

Object Storage Arubacloud
0 głosów
513 wizyt
pytanie zadane 2 listopada 2017 w SQL, bazy danych przez Patryk1712 Nowicjusz (120 p.)

Witam,
Chciałbym wypisać produkty z bazy danych. Po 2 z każdej kategorii
Tak wygląda zapytanie :

$resultt = Db::GetInstance()->executeS("SELECT DISTINCT a.`id_product`, cl.`id_category`, b.`name` AS `name`, `reference`,`available_now`, a.`price` AS `price`, sa.`active` AS `active`, image_shop.`id_image` AS `id_image`, cl.`name` AS `name_category`,sav.`quantity` AS `sav_quantity`, sp.`reduction` 
FROM `". _DB_PREFIX_ ."product` a  LEFT JOIN `". _DB_PREFIX_ ."product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) 
LEFT JOIN `". _DB_PREFIX_ ."stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop = 1 AND sav.id_shop_group = 0 ) 
JOIN `". _DB_PREFIX_ ."product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) 
LEFT JOIN `". _DB_PREFIX_ ."category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default) 
LEFT JOIN `". _DB_PREFIX_ ."category` ca ON (cl.`id_category` = ca.`id_category`) 
LEFT JOIN `". _DB_PREFIX_ ."image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default) 
LEFT JOIN `". _DB_PREFIX_ ."image` i ON (i.`id_image` = image_shop.`id_image`)
 LEFT JOIN `". _DB_PREFIX_ ."feature_product` fp ON (fp.`id_product` = a.`id_product`)
 LEFT JOIN `". _DB_PREFIX_ ."feature_value_lang` fvl ON (fvl.`id_feature_value` = fp.`id_feature_value`)
 LEFT JOIN `". _DB_PREFIX_ ."specific_price` sp ON (sp.`id_product` = a.`id_product`)
 LEFT JOIN `". _DB_PREFIX_ ."product_sale` ps ON (ps.`id_product` = a.`id_product`)
 WHERE 2 AND sa.`active` = 1 AND ca.`id_parent` = '". $categoriaadjust ."' AND b.`name` NOT LIKE '". $nazwa_produktu ."%' AND cl.`id_category` NOT LIKE '". $product->id_category_default ."' AND sav.`quantity` > 0 
 ORDER BY cl.`id_category` ASC LIMIT 15");

Czy jest możliwość pogrupowania po id_category żeby pokazało po 2 produkty z jednej kategorii a nie jak teraz że wyświetlają się wszystkie. 


Z góry dzięki za pomoc.

 

komentarz 2 listopada 2017 przez Michał Kazula Pasjonat (19,540 p.)
Ja bym dał raczej LIMIT po id_category na 2 niż GROUP BY!
komentarz 3 listopada 2017 przez Patryk1712 Nowicjusz (120 p.)
Po dodaniu LIMIT 2 wyświetlą mi się tylko 2 rekordy. JA chciałby zrobić żeby wyświetliło po 2 z każdej kategorii, chyba że źle coś dodaję.

1 odpowiedź

0 głosów
odpowiedź 3 listopada 2017 przez ccsystem Początkujący (260 p.)

Istnieje taka możliwość, jednak takie zapytanie jest nie efektywne:

Przede wszystkim musisz wiedzieć które 2 wiersze chcesz wyświetlić dla danej kategorii.

Mogą to być MAX i MIN id_produktu grupujesz po id_produktu, duplikujesz całe zapytanie i z dwóch tworzysz unię to co powstanie będzie podzapytaniem głównego które posortujesz sobie po id_category, oczywiście pozostałe kolumny również musisz pogrupować.

 

 

Podobne pytania

0 głosów
2 odpowiedzi 253 wizyt
pytanie zadane 6 kwietnia 2016 w SQL, bazy danych przez Lukasz95 Bywalec (2,160 p.)
+1 głos
2 odpowiedzi 623 wizyt
pytanie zadane 21 marca 2021 w SQL, bazy danych przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 621 wizyt
pytanie zadane 1 grudnia 2018 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...