Autor Zpráva
crossbone
Profil *
Ahoj,
mysql moc nedělám ale potřeboval bych pomoc s tímhle dotazem:
SELECT * FROM parametry_seznam WHERE id IN (SELECT idParametr FROM parametry_hodnoty WHERE idProdukt='1' GROUP BY idParametr) AND filtr='1' GROUP BY nazev ORDER BY poradi ASC


tam kde je to
WHERE idProdukt='1'
tak se opakuje několikrát, řekněme například 50x je tam idProdukt='1' OR idProdukt='2' OR idProdukt='3' a tak dále...

četl jsem si tento článek http://www.linuxsoft.cz/article.php?id_article=882 ale moc tomu nerozumím... předem díky za ochotu
TomášK
Profil
Odkud se berou ty idProduktu? Z formuláře, který ti přijde na web nebo jsou výsledkem nějakého výpočtu? Pokud jsou z formuláře, pak nezbývá nic jiného, než je explicitně vypsat - v dotazu někde musí být uloženo, co se po něm chce. Jde to trochu zjednodušit:
WHERE idProdukt IN (1, 2, 3, ...)

Pokud jsou to výsledky nějakého předešlého dotazu, pak by ty dotazy asi šli spojit do jednoho, ale je potřeba vidět i ten předchozí.
crossbone
Profil *
už jsem to vyřešil jinak, ale díky za ochotu :)
crossbone
Profil *
přece jenom bych něco potřeboval...
když mám tabulku například "panelak" a ta má 3 sloupce, první sloupec je primární klíč ten tam nehraje roli... druhej sloupec je například číslo pokoje, a třetí sloupec je číslo ubytovaného hosta. S tim, že jeden host může být ubytován ve více pokojích. A já chci, složit dotaz, kterej mi najde průnik například dvou hostů, číslo pokoje neznám - kdybych ho znal tak to dokážu napsat... zkrátka potřebuju najít číslo pokoje, ve kterým bydlí host 1,2 a 3...
SELECT cislo_pokoje FROM panelak WHERE ....


díky za ochotu
TomášK
Profil
Zkus tohle:
SELECT cislo_pokoje FROM panelak WHERE cislo_hosta IN (1,2,3) GROUP BY cislo_pokoje HAVING COUNT(DISTINCT id) = 3
crossbone
Profil *
nešlo by to spíše přes INTERSECT?
crossbone
Profil *
vysvětlíš mi prosím co dělá toto?
HAVING COUNT(DISTINCT id) = 3
TomášK
Profil
Už tam vidím chybu, omlouvám se:
SELECT cislo_pokoje FROM panelak WHERE cislo_hosta IN (1,2,3) GROUP BY cislo_pokoje HAVING COUNT(DISTINCT cislo_hosta) = 3


Operátor INTERSECT nebo něco jemu podobného v MySQL neznám. Ale to neznamená, že to tam není.

Ten dotaz by šel napsat i pomocí joinů
SELECT 
    *
FROM 
    panelak p1
    JOIN panelak p2 ON p1.cislo_pokoje = p2.cislo_pokoje AND p2.cislo_hosta = 2
    JOIN panelak p3 ON p1.cislo_pokoje = p3.cislo_pokoje AND p3.cislo_hosta = 3
WHERE 
    p1.cislo_hosta = 1;

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: