NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Dotaz zkrze více tabulek - JOIN

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Martin Suchodol:24.12.2019 17:00

Ahoj, mám problém s dotazem skrze více tabulek. Nejdříve kód

SELECT *
FROM comment
JOIN user ON comment.user_id = 1
WHERE article_id = 1
ORDER BY comment_id

Potřebuji, docílit toho aby se mi na základě aricle_id zobrazila všechna data což se děje správně dokonce vydím i číselnou hodnotu poukazující na jméno uživatele. Ale když se pak dané ID pokusím použít abych místo čísla dosadil jméno tak se mi všude dosadí jen jedno a to poslední jméno uživatele v databázi. Podobnou věc to dělá i když kód spustím v php my adminovi. Tudíž si nemyslím že je tochyba PHP ale spíše špatný zápis SQL kódu.

 
Odpovědět
24.12.2019 17:00
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24.12.2019 20:53

comment.user_id = 1 -- vsude pridavas uzivatele 1, takze ocekavas co?

http://www.mysqltutorial.org/mysql-join/

Editováno 24.12.2019 20:54
 
Nahoru Odpovědět
24.12.2019 20:53
Avatar
Odpovídá na Martin Suchodol
Michal Štěpánek:25.12.2019 10:48

Buď jsi nepochopil, k čemu slouží JOIN, nebo já nechápu, čeho se snažíš docílit...
Podle mě by zápis JOIN měl být nějak takto:

JOIN user on comment.user_id = user.uset_id
Nahoru Odpovědět
25.12.2019 10:48
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Martin Suchodol:26.12.2019 7:44

I toto jsem zkoušel, ale pořád to blbne, vypíše to danou osobu i v případě že u dané položky osoba není.

Snažím se docílit tohoto. Dvě tabulky v jedné jsou uživatelé a v druhé komentáře. U komentářů se místo jména ukládá jen zástupný znak, v tomto případě číslo které přesně koresponduje se jménem uživatele. V šabloně následně pomocí rekurze vypisuji komentářes spolu s dalšímu daty. vše se vypisuje jak má až na toto.

V phpmyadmin, jsem zkoušel různé varianty. Buď nastalo to že se ke všem komentářům přiřadil poslední uživatel, nebo cyklicky všechni uživatelé, tj v databázi jsou tři uživatelé a ti se cyklicky opakovali u všech příspěvků a nebo se mi zobrazí když zadám id uživatele tak opět daný uživatel u všech komentářů.

 
Nahoru Odpovědět
26.12.2019 7:44
Avatar
Martin Suchodol:26.12.2019 8:01

Tak dobře, teď zda mohu poprosit o vysvětlení.

Kód zustal prakticky beze změny jediné co jsem udělal bylo to že jsem JOIN upravil takto

INNER JOIN user ON user.user_id = comment.user_id

Pokud se nepletu tak, JOIN se standartně, vykládá jako INNER JOIN. Nebo se pletu? Používám Maria DB

 
Nahoru Odpovědět
26.12.2019 8:01
Avatar
Odpovídá na Martin Suchodol
Michal Štěpánek:26.12.2019 10:23

Ano, standardně je inner. Zkus nedávat do dotazu hvězdičku, ale vypiš sloupce, které chceš zobrazit

Select comment.neco, comment.necojineho, user.jmeno, user.prijmeni from comment join...
Nahoru Odpovědět
26.12.2019 10:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Martin Suchodol:26.12.2019 13:26

Jo tohle už jsem udělal, obecný jsem to měl jen pro testovací účely. Protože jsem to v phpmyadminovy napsal dohromady dost možná 30x a nechtělo se mi to vypisovat vše, dokud mi to nepůjde tak jak si představuju. Každopádně díky.

 
Nahoru Odpovědět
26.12.2019 13:26
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.12.2019 14:00

LEFT JOIN? Mas to v tom odkaze.

 
Nahoru Odpovědět
26.12.2019 14:00
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 8 zpráv z 8.