• 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

VPS Starter Arubacloud
0 głosów
497 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 244 wizyt
pytanie zadane 6 kwietnia 2016 w SQL, bazy danych przez Lukasz95 Bywalec (2,160 p.)
+1 głos
2 odpowiedzi 558 wizyt
pytanie zadane 21 marca 2021 w SQL, bazy danych przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 589 wizyt
pytanie zadane 1 grudnia 2018 w SQL, bazy danych przez hiper007 Stary wyjadacz (11,270 p.)

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...