Portál AbcLinuxu, 24. dubna 2024 12:03


Dotaz: Nalezení stejných produktů v objednávkách

21.6.2016 10:46 Standa
Nalezení stejných produktů v objednávkách
Přečteno: 1119×
Odpovědět | Admin
Ahoj, potřeboval bych pomoci s problémem, e-shop generuje objednávky a z těch bych potřeboval vybrat ty, ve kterých se opakuje nějaká minimálně dvojice produktů, které si zákazníci zakupují společně. Samozřejmě dopředu nevím, které a jestli vůbec jsou takové skupiny produktů. Jde to již vyselektovat na úrovni databáze nebo je nutno to udělat na úrovni kódu?

Díky

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

Odpovědi

21.6.2016 10:50 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Nalezení stejných produktů v objednávkách
Odpovědět | | Sbalit | Link | Blokovat | Admin
SQL HAVING Clause?
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
21.6.2016 12:19 ttt
Rozbalit Rozbalit vše Re: Nalezení stejných produktů v objednávkách
Odpovědět | | Sbalit | Link | Blokovat | Admin
Označuje se to jako "Market Basket Analysis", pokud by tě zajímala nějaká teorie okolo.
Josef Kufner avatar 21.6.2016 12:49 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Nalezení stejných produktů v objednávkách
Také doporučuju se porozhlédnout obecněji v oboru zvaném "Data Mining". O chování zákazníků toho bylo napsáno velmi mnoho. Zajímavým pokračováním je i Machine Learning, kde se napasuje na data od zákazníků nějaký hezký model a pak lze předpovídat jejich chování a testovat si marketingové strategie dřív, než to něco bude stát.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 21.6.2016 12:38 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Nalezení stejných produktů v objednávkách
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkusil bych join objednávek (položek objednávek) sama se sebou, dostaneš vechny dvojice produktů v dané objednávce, a pak pomocí group by a count spočítat, kolikrát se která dvojice vyskytuje. Tím zjistíš, které dvojice máš. Pak můžeš podle těch dvojic zpětně dohledat, ve kterých objednávkách se vyskytují. Jak přesně ten dotaz postavit už záleží na tom, co tě zrovna bude zajímat a jaká vstupní data máš k dispozici.
Hello world ! Segmentation fault (core dumped)
21.6.2016 19:57 Standa
Rozbalit Rozbalit vše Re: Nalezení stejných produktů v objednávkách
Ahoj, díky všem za rady, přiznám se však, že si nejsem jistý, jestli jsem pochopil správně radu od Josefa Kunerta. Struktura tabulek je přibližně následující

tabulka Objednávky id - PK id_produktu sloupec 1 sloupec 2 sloupec 3 atd.

tabulka Produkty id - PK sloupec 1 sloupec 2 sloupec 3

Objednávky.id_produktu = Produkty.id

Každá Objednávka může mít minimálně 1 a maximálně n Produktů. Pokud udělám Select, dostanu seznam produktů v jednotlivé objednávce. Na úrovni kódu bych a - vytvořil pro každou objednávku objekt a porovnával v cyklu, zdali více objektů neobsahuje stejný produkt b - vytvořil pro každou objednávku objekt, vyselektoval všechny id_produktu, hodnoty vložil do pole a pak v cyklu procházel a počítal výskyt v objektech. Zdá se mi to však příliš krkolomné, přiznám se však, že velký specialista na složité databázové dotazy nejsem. Pokud by mi někdo prosím mohl pomoci s kostrou dotazu, byl bych moc vděčný, ušetřilo by mi to asi spoustu času. Za případné rady dopředu děkuji.
22.6.2016 10:39 izidor
Rozbalit Rozbalit vše Re: Nalezení stejných produktů v objednávkách
nejak takto (netestovano) - vybere pouze ty dvojice produktu, ktere jsou na alespon 2 objednavkach. Predpokladam, ze v kazde objednavce je produkt uveden pouze jednou.
select a.id_produktu, b.id_produktu, count(*)
from objednavky a, objednavky b
where a.id = b.id
and a.id_produktu < b.id_produktu
group by a.id_produktu, b.id_produktu
having count(*) >= 2

26.6.2016 19:06 Standa
Rozbalit Rozbalit vše Re: Nalezení stejných produktů v objednávkách

Omlouvám se za pozdnější reakci, děkuji za kostru dotazu.

Standa

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.