Portál AbcLinuxu, 8. května 2025 07:10

Dotaz: Mysql - dotaz

28.1.2016 10:29 alio
Mysql - dotaz
Přečteno: 1380×
Odpovědět | Admin
Ahoj,

řeším jeden složitější SQL dotaz a nevím, jak ho správně sestavit. Můžu poprosit o pomoc?

Jde o to, že mám tabulky:

recepty > id, nazev, popis recepty_kategorie > id_receptu, id_kategorie (1 recept = N kategorií) kategorie > id, nazev

Nacházím se v detailu receptu. A potřebuju vypsat 3 podobné recepty, ze stejných kategorií, jako je vybraný recept.

Snad jsem to napsal srozumitelně.

Díky!


Řešení dotazu:


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

Odpovědi

28.1.2016 10:31 alio
Rozbalit Rozbalit vše Re: Mysql - dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
Omlouvám se za formátování, napravuji:

Jde o to, že mám tabulky:

recepty > id, nazev, popis
recepty_kategorie > id_receptu, id_kategorie (1 recept = N kategorií)
kategorie > id, nazev
Nacházím se v detailu receptu. A potřebuju vypsat 3 podobné recepty, ze stejných kategorií, jako je vybraný recept.

Snad jsem to napsal srozumitelně.

Díky!

28.1.2016 10:40 NN
Rozbalit Rozbalit vše Re: Mysql - dotaz
Jak vypada tabulka, kdyz ma recept vice kategorii?
28.1.2016 12:04 alio
Rozbalit Rozbalit vše Re: Mysql - dotaz
recept_id = 1, kategorie_id = 2
recept_id = 2, kategorie_id = 7
recept_id = 1, kategorie_id = 12
recept_id = 3, kategorie_id = 8
recept_id = 1, kategorie_id = 3
např.... díky
28.1.2016 12:17 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Mysql - dotaz
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejprve si zkus základní vazbu M:N mezi tabulkami. Pak už jen stačí přidat klauzuli WHERE a případně LIMIT.
SELECT recepty.id, recepty.nazev, kategorie.id, kategorie.nazev
    FROM recepty
    JOIN recepty_kategorie AS rk ON recepty.id=rk.id_receptu
    JOIN kategorie ON rk.id_kategorie=kategorie.id
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.1.2016 12:34 alio
Rozbalit Rozbalit vše Re: Mysql - dotaz
Děkuji za pomoc.

Ještě jedna drobnost - ten SQL se volá v detailu receptu a vlastně nabízí podobné recepty tomu, který si uživatel prohlíží.

Tzn. tomu SQL bych potřeboval říct ještě (a to nedokážu doplnit tak, aby to fungovalo), jaké je aktuální ID receptu (recepty.id=1), aby dotaz nalezl podobné recepty podle stejných kategorií.

Děkuji všem
28.1.2016 12:42 ttt
Rozbalit Rozbalit vše Re: Mysql - dotaz
WHERE a LIMIT na to nestačí bez toho, aby tam bylo něco natvrdo. Recept 1 spadá do kategorií (a,b,c,...), cíl je najít jiný recept, který spadá do těch samých kategorií. Bude to myslím něco jako
SELECT rk_other.id_receptu
FROM recepty
    JOIN recepty_kategorie AS rk ON recepty.id=rk.id_receptu
    JOIN recepty_kategorie AS rk_other USING(id_kategorie)
WHERE recepty.id = 1
GROUP BY rk_other.id_receptu
ORDER BY COUNT(DISTINCT id_kategorie) DESC
LIMIT 10
28.1.2016 13:07 alio
Rozbalit Rozbalit vše Re: Mysql - dotaz
To je přesně ono - díky moc! :)

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.