IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
katrincsak
Člen
Avatar
katrincsak:29.4.2017 10:29

Zdravím,

už jsem nad tím zabil spoustu času a nevím jak to logicky vyřešit. Možná jsem zaujatý na určité řešení a přehlížím jiné, nebo jsem úplně blbí..

Snažím se vytvořit databázi do které se ukládají podobné produkty. Uživatel si v administraci spravuje určitý produkt a k němu si nakliká podobné produkty, což je v pohodě. Na víc určuje zda se jedná o produkt podobný a nebo jen o příslušenství což určuje další vazbu, kterou vysvětlím dále.

Vytvořil jsem tabulku se sloupci:
id,master_id,sla­ve_id,cat_id,typ

Do toho joinuju pak další data jako je název a další potřebné informace ke konkrétnímu produktu.

V případě, že jsem např. na mobilu Samsung J3, tak chci k němu přidat podobný produkt Samsung J7.

master_id = ID Samsungu J3
slave_id = ID Samsungu J7
Typ = 1 -> podobný produkt


Navržené je to tak, že master_id a slave_id má společnou vazbu. To znamená že oba produkty si jsou podobné A <-> B tak B <-> A . Proto je zbytečné tyto data ukládat na 2 řádky. Dat bude tisíce a tak redukce je určitě potřeba.

Udělal jsem si ručně pole, které simuluje data, protože v práci budu až v úterý..

A teď oříšek v případě zobrazení.
V případě, že jsem na Samsungu J3 měl by se mi ukázat podobný produkt J7 a stejně tedy opačně.

Jenže z důvodu ohromné databáze produkty jsou jinde, tahle informace o podobných produktech také a kvůli náhledu i informace pro odkaz na obrázky jinde. Informace k podobným produktům vytáhnu vzájemně, ale již obrázky musím poslat v dalším jednorázovým dotazu. Takže mám 2 pole kde v jednom jsou produkty a v druhém obrázky a následně to posílám na XSL transformaci.

Vytvořil jsem simulující data 2 polí. owner = master_id, nebo slave_id.

https://pastebin.com/qtQPsa7e

Potřebuji tyhle 2 pole spojit, tak, abych na importoval ke každému ID i náhledy a měl stále informaci zda je to typ 1 a nebo 2 protože následně to vypisuji podle téhle informace.

Úkolem je :

Když budu na ID 1, tak se mi musí vypsat id 2 i 5, když budu na ID 5, tak se mi musí vypsat id 1 .

Klidně o tom pokecám na Skype, abych to vysvětlil lépe. Kdybych to celé mohl vytáhnout na straně PostgreSQL včetně těch obrázků, tak je po problému, ale už takhle to tahám v řetězci a obrázků je několik a musí to mít další pravidla :/

 
Odpovědět
29.4.2017 10:29
Avatar
katrincsak
Člen
Avatar
katrincsak:30.4.2017 11:22

Prosím o smazání vlákna, uvědomil jsem si že jsem to napsal zbytečně zdlouhavě a možná i špatně. Pravděpodobně řešení již mám.

Vložení obrázků bych hodil do "for" podle počtu typu ;-) abych to neduplikoval. Ale nějak jsem opomenul podmínku "if" v době zápisu do pole. Získám tak všechny data, bez duplikace a tím, že jsem typ dal jako klíčový, tak se mi to hezky rozdělilo. Uvedený příklad s popisem trochu nesouhlasí, ale získám tak vše co je potřeba. Pravděpodobně není ani nutné vkládat do vnořeného pole s id klíčem stejnou hodnotu.

foreach($poleProduktu as $produkt){
        if(!$completeProduct[$produkt['typ']][$produkt['master_id']]){
                $completeProduct[$produkt['typ']][$produkt['master_id']]['master_id'] = $produkt['master_id'];

                $completeProduct[$produkt['typ']][$produkt['master_id']]['name'] = $produkt['name'];
        }

        if(!$completeProduct[$produkt['typ']][$produkt['slave_id']]){
                $completeProduct[$produkt['typ']][$produkt['slave_id']]['slave_id'] = $produkt['slave_id'];

                $completeProduct[$produkt['typ']][$produkt['slave_id']]['name'] = $produkt['name'];
        }
}

foreach($poleObrazku AS $obrazky){
        $completeProduct[1][$obrazky['owner']]['image_url'] = $obrazky['url'];
        $completeProduct[2][$obrazky['owner']]['image_url'] = $obrazky['url'];

        $completeProduct[1][$obrazky['owner']]['image_id'] = $obrazky['id'];
        $completeProduct[2][$obrazky['owner']]['image_id'] = $obrazky['id'];
}
 
Nahoru Odpovědět
30.4.2017 11:22
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.