dodání ihned! nové
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
BF
Avatar
Verquido
Redaktor
Avatar
Verquido:19.5.2016 16:43

Mám databázi kde je nějaká věc a tu věc popisuje třeba 10 klíčových slov. A já potřebuji nějak zjistit podle těch klíčových slov o jakou věc se jedná. Když už né přesně tak nejvíce pravděpodobně.

Díky :)

 
Odpovědět
19.5.2016 16:43
Avatar
Odpovídá na Verquido
Martin Štěpánek :20.5.2016 19:42

Můžeš prosím trochu více rozvést svoji myšlenku? :-) Myslíš jako, že někdo zadá slovo auto a ono ti to z databáze vytáhne Škoda atd...? :-)

Nahoru Odpovědět
20.5.2016 19:42
Všechno jde naprogramovat, chce to jen čas a chuť...
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Martin Štěpánek
Verquido:20.5.2016 21:06

Nn, třeba koktejl.
Uživatel si vybere klíčová slova "banán, mléko, cukr" na první pozici bude Banánový koktejl který obsahuje všechny slova. Na dalších místech budou další koktejly, protože je tam mléko..
Chápeš?**:)

 
Nahoru Odpovědět
20.5.2016 21:06
Avatar
Martin Štěpánek :20.5.2016 21:10

Vytvoř si 2 tabulky, koktejly a slova. V 1. bude id_koktejlu a nazev. Dále 2. tabulka bude obsahovat id_slova, id_koktejlu (ke kterému patří) a slovo.
Díky tomu bude moci mít jeden koktejl více slov. Poté už jen hledej v databázi slov slova použitím například LIKE a vypiš si podle id_koktejlu koktejly v první tabulce.
Snad jsem to napsal srozumitelně. :-)

Nahoru Odpovědět
20.5.2016 21:10
Všechno jde naprogramovat, chce to jen čas a chuť...
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Martin Štěpánek
Verquido:20.5.2016 21:53

A to budu muset psát například ze koktejl
Banánový- mleko
Borůvkovy-mleko
Jahodový - mléko
Atp? To se bude hodně opakovat ne? :)

 
Nahoru Odpovědět
20.5.2016 21:53
Avatar
Odpovídá na Verquido
Martin Štěpánek :21.5.2016 8:36

Ano akorát budeš uchovávat jen Id koktejlu a věc se opakovat musí pokud ji chceš u více koktejlů. :-)

Nahoru Odpovědět
21.5.2016 8:36
Všechno jde naprogramovat, chce to jen čas a chuť...
Avatar
Verquido
Redaktor
Avatar
Verquido:21.5.2016 14:37

A nešlo by to udělat spíš nějak jako:

id_kokteilu jmeno_kokteilu ingredience1 ingredience2 ingredience3
1 Banánový mléko banány cukr
2 Borůvkový mléko borůvky šlehačka
3 Jahodový mléko jahody cukr

Potom bych třeba do vyhledávání zadal

$keywords = "mléko, cukr";

A vypsalo by mi to všechny 3 kokteily, protože všechny obsahují mléko.. Ale kokteil 1 a 3 by byl nad 3 protože ty obsahují ještě cukr a 2 neobsahuje cukr..

Tak nějak bych si to představoval :D

 
Nahoru Odpovědět
21.5.2016 14:37
Avatar
Lukáš Hypša:22.5.2016 9:04

Já bych to udělal stejně :)

Nahoru Odpovědět
22.5.2016 9:04
Jsem lama co se roky snaží naučit napsat aspoň pár řádků a furt mu to nejde...
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Martin Štěpánek
Verquido:22.5.2016 11:09

Jediné co mě napadá je to udělat pomocí cyklů.. Že bych v PHP udělal cyklus, který by šel sestupně.
3,2,1 a v každé by hledal schodu.
.
3 by hledal schodu ve 3 ingrediencích
2 ve dvou
a v jedné ingredienci

a pak by se to takhle postupně vypsalo.. Ale nevím jestli by to nebylo moc náročné na rychlost.

Editováno 22.5.2016 11:09
 
Nahoru Odpovědět
22.5.2016 11:09
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Vlado Cukalovsky:22.5.2016 11:54

No najlepšie by bolo ako už bolo vyššie spominané, že budeš mať jednu tabuľku s koktejlami, druhu tabuľku s ingrediencami a kedže je to vzať many to many N:M, tak si vytvoriš tretiu tabuľku aby si tuto vazbu rozbil a ta bude obsahovať id_koktejl a id_ingrediencie. Potom si to už vieš pekne podľa tejto tabuľky selectnuť podľa určenej ingrediencie.

 
Nahoru Odpovědět
22.5.2016 11:54
Avatar
Tycek
Člen
Avatar
Tycek:22.5.2016 11:56

Mně třeba ještě napadlo jiné řešení.
Co kdybys měl tabulku se sloupci id_koktejlu, nazev_koktejlu a ingredience.
Ve sloupci ingredience bys měl string s 10 klíčovými slovy oddělených třeba čárkou.
Pak by sis pro každý koktejl načetl celý string, rozsekal by sis ho na pole stringů a pak akorát porovnával se zadanými klíčovými slovy a podle počtů shod bys je pak seřadil.

 
Nahoru Odpovědět
22.5.2016 11:56
Avatar
Vlado Cukalovsky:22.5.2016 12:00

Áno, ale takto by si mi pri každom hľadaní musel vybrať každý jeden koktejl z databázy rozbiť ten string, porovnať to a niekde ukladat priebežny výsledok.
Ak maš tabuľky ako som vysvetlovaľ o príspevok vyššie, tak vieš vytiahnuť presne koktejl ktorý obsahuje danú/é ingrediencie a takisto aj ich počet výskutu v tom koktejli.

 
Nahoru Odpovědět
22.5.2016 12:00
Avatar
Vlado Cukalovsky:22.5.2016 12:15

Pridávam aj príklad selectu, ktorý vráti koktejl a počet výskytov zadaných ingrediencií.
Tabuľka koktejl_ingt

koktejl ingt
bananovy banan
bananovy mlieko
jahodovy mlieko
jahodovy jahoda

Query:

SELECT koktejl,COUNT(koktejl) as pocet
FROM koktejl_ingt
WHERE ingt IN ("banan","mlieko")
GROUP BY koktejl
ORDER BY pocet DESC;
koktejl pocet
bananovy 2
jahodovy 1

V realnej appke, to len prerobiš na tri tabuľky koktejl, ingrediencie a túto tabuľku kde konkretné hodnoty nahradiš IDčkami na tabuľky koktejl a ingrediencie.

Snaď som pomohol. :)

Editováno 22.5.2016 12:17
 
Nahoru Odpovědět
22.5.2016 12:15
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Vlado Cukalovsky
Verquido:22.5.2016 12:21

Jasný, chápu :) Super, jen jsem myslel že tohle bude dost zatěžovat databázi, když tam bude třeba 1000 koktejlů.. Ale dobře, je to pěkný ;)
Jen ještě abych to úplně pochopil můžeš mi to tu napsat úplně celý? jakože i fungující? Nebo přes soubor abych viděl i funkčnost. Z tohohle sem pochopil princip, ale nevím jak to napojit i na uživatelský script atp. :)

Díky.

 
Nahoru Odpovědět
22.5.2016 12:21
Avatar
Vlado Cukalovsky:22.5.2016 12:31

No treba uvažovať vždy to, že práca s databázou je oveľa rychlejšia ako riešiť rovnaký problém aplikačne. V tomto prípade ak vieš že každý koktejl nemá rovnaký počet ingrediencií, tak je podľa mňa určite toto najlepšia voľba.
No ak to chceš implementovať na tie tri tabuľky, tak jedine do podmienky WHERE ingt IN, vložiš subselect do tabuľky pre ingredience, kde vytiahneš tie ingrediencie, ktoré ti boli zadané uživateľom, a pre vytiahnutie koktejlov spraviš inner join na tabuľky koktejl a potom by ti to malo vypluť rovnaký výstup.

 
Nahoru Odpovědět
22.5.2016 12:31
Avatar
Vlado Cukalovsky:22.5.2016 12:42

Tabuľka koktejl
id, názov

Tabuľka ingrediencie
id, názov

Tabuľka koktejl_ingt
id_koktejl , id_ingt

SELECT k.nazov, COUNT(ki.id_koktejl) as pocet
FROM koktejl_ingt ki
INNER JOIN koktejl k ON k.id = ki.id_koktejl
WHERE ki.id_ingt IN (
        SELECT id
        FROM ingrediencie
        WHERE názov IN ("banan","mlieko") // proste vlozis tu tvoje pole vybranych ingrediencii
)
GROUP BY ki.id_koktejl
ORDER BY pocet DESC;
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
22.5.2016 12:42
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Vlado Cukalovsky
Verquido:22.5.2016 12:51

Jop, díky moc.. Vyzkouším to ;)

 
Nahoru Odpovědět
22.5.2016 12:51
Avatar
Odpovídá na Verquido
Martin Štěpánek :22.5.2016 16:12

Mimochodem určitě by to takhle šlo, ale kdyby jsi k nějakému koktejlu chtěl přiřadit více jak 3 ingredience, byl bys v háji :-)
Tahle můžeš uchovávat ke každému koktejlu kolik chceš ingrediencí. :-)

Nahoru Odpovědět
22.5.2016 16:12
Všechno jde naprogramovat, chce to jen čas a chuť...
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 18 zpráv z 18.