Portál AbcLinuxu, 9. května 2024 06:14


Dotaz: komplikovanější select

29.6.2014 18:23 Jiří Rycka
komplikovanější select
Přečteno: 184×
Odpovědět | Admin
Zdravím, mám problém s navržením selectu popř. struktury databáze.

Problém v jednoduchosti, osekáno o zbytečnosti: 2 tabulky: Recept (obsahující ID a postup) Surovina(obsahující ID na název) Vazební tabulka - M:N vazba - definující jaké suroviny jsou potřeba na daný recept.

Dá se sestavit select který by měl jako vstup 3 parametry(reálně by jich bylo mnohem víc, ale jde o příklad) udávající názvy surovin a výsledkem by byl výpis všech receptů které obsahují dané suroviny ve formátu - Recept + počet surovin které se shodují.

Vůbec netuším jak takový select postavit.

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

Odpovědi

mess avatar 29.6.2014 21:07 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: komplikovanější select
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tady se řeší něco podobného. Zkusím to napasovat na tvůj případ:
SELECT
  Recept.ID,
  Recept.postup,
  (
    SELECT COUNT(*) FROM Suroviny
    LEFT JOIN vazba ON Surovina.ID = vazba.surovina_id
    WHERE vazba.recept_id = Recept.ID AND Surovina.nazev IN ("název1", "název2", ...)
  ) as pocet_shodnych
FROM Recept
LEFT JOIN vazba    ON vazba.recept_id   = Recept.ID
LEFT JOIN Surovina ON vazba.surovina_id = Surovina.ID
WHERE Surovina.nazev IN ("název1", "název2", ...);
Za správnost neručím. Nevýhoda je, že se musí názvy surovin dosadit na dvě místa. Výsledek dotazu by měl obsahovat 3 soupce - ID receptu, postup a počet surovin, které se shodují. Vybere to všechny recepty, kde se shoduje aspoň jedna surovina.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.

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.