Select mezi třemi tabulky – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Select mezi třemi tabulky – MySQL – Fórum – Programujte.comSelect mezi třemi tabulky – MySQL – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vytvořte si vlastní webové stránky. Snadno, rychle a levně přes Saywebpage.com
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Pavelv0
Stálý člen
25. 1. 2020   #1
-
0
-

Ahoj, potřebuji vypsat obsah druhé tabulky, když znám provázanost s první tabulkou a následně počet záznamů z třetí tabulky. Mám takovéto schéma:

Tabulka uzivatel:
ID  Jméno   Skupina
1   Pavel     100
2   Honza    100
3   David     200

Tabulka objednavky:
ID  Skupina
1   100
2   100
3   100
4   200

Tabulka produkty:
ID  Uzivatel    Objednavka  Polozka
1    1             1                   4571
2    1             1                   5428
3    2             1                   1518
4    1             3                   1548

Vstupem je ID uživatele (1-3), z toho zjistím do jaké patří skupiny (100,200) a následně vypíši všechny objednávky které patří jeho skupině. Následně zjistím počet objednaných produktů každé objednávky.

Příklad:
Vstup: ID uzivatele = 1         

Očekávaný výstup:
Objednávka  Počet
1                   2
2                   0
3                   1

Dotaz:

 SELECT Objednavky.Id AS objednavka, uzivatele.Id AS uzivatel, produkty.Polozka AS produkt FROM objednavky
 INNER JOIN produkty ON produkty.objednavka = objednavky.id
 INNER JOIN uzivatele ON uzivatele.skupina = objednavky.skupiny  
 WHERE uzivatele.Id = '1'

Avšak dostanu odpověd, že uživatel má objednané všechny položky ve všech objednávkách. Nedělá mi problém trojtě vnořeným selectem vypsat počet objednávek dle uživatele, ale již nedokáži to spojit s dostupnýma objednávkama a vypsat i objednávky na které uživatel nereagoval.

Nahlásit jako SPAM
IP: 212.24.139.–
Kit+14
Guru
25. 1. 2020   #2
-
0
-

#1 Pavelv
Honza přece také patří do skupiny 100.

Nahlásit jako SPAM
IP: 37.188.156.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Pavelv0
Stálý člen
25. 1. 2020   #3
-
0
-

#2 Kit
Nevím co tim chceš říct. Vstupem je uživatel Pavel, respektive jeho ID a potřebuji vypsat všechny objednávky ke kterým má přístup, plus seznam již objednaných položek z každé objednávky.

Nahlásit jako SPAM
IP: 212.24.139.–
gna
~ Anonymní uživatel
1166 příspěvků
25. 1. 2020   #4
-
0
-

Mně se to teda nechce zkoušet, ale ať na to koukám, jak chci, tak nevidím, že by tam něco nemělo sedět. Akorát pokud tam chceš i nuly, tak první join bude left.

select objednavky.id, sum(produkty.uzivatel = uzivatele.id) from objednavky
left join ...
...
group by objednavky.id
Nahlásit jako SPAM
IP: 213.211.51.–
Pavelv0
Stálý člen
26. 1. 2020   #5
-
0
-

#4 gna
Máš pravdu, left join jsem tam původně měl. Ale i tak výstup je:

Objednávka    Uživatel    Produkt
1                     1              4571  - ano je v pořádku
1                     1              5428  - ano je  v pořádku
1                     1              1518  - Chyba, tohle má uživatel 2
2                     1              NULL  - ano je v pořádku
3                     1              1548  - ano je v pořádku

EDIT:

vyřešeno úpravou prvního JOINU 

LEFT JOIN Produkty ON Produkty.objednavka = Objednavky.id AND Produkty.Uzivatel = '1'

Ale nerozumím tomu

Nahlásit jako SPAM
IP: 212.24.139.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý