Diskuze: Více JOINů na jedno id
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zkusil jsem něco takového ale zjevně je to úplně mimo:
SELECT *
FROM scripts
INNER JOIN user AS creator ON user.userId = scripts.creatorId
RIGHT JOIN user AS corrector ON user.userId = scripts.correctorId
/*correctorId může být NULL v případě že script ještě nikdo neupravil*/
ORDER BY createDate DESC
Zkus použít aliasy u spojovaných tabulek. Něco takového by mohlo fungovat.
SELECT *
FROM scripts
INNER JOIN user u1 ON u1.userId = scripts.creatorId
LEFT JOIN user u2 ON u2.userId = scripts.correctorId
ORDER BY createDate DESC
Hm, pořád mám něco špatně. Zkusím přiložit víc konkrétního kódu.
...
$result = Db::queryAll('
SELECT *
FROM scripts
INNER JOIN user u1 AS creator ON u1.userId = scripts.creatorId
LEFT JOIN user u2 AS corrector ON u2.userId = scripts.correctorId
ORDER BY createDate DESC
');
foreach ($result as $u)
{
echo htmlspecialchars($u['creator']);
echo htmlspecialchars($u['corrector'])
}
Přikládám i ukázky tabulek:
### User
userId | userName | userPass | |
---|---|---|---|
1 | Ondřej Pech | 1e8cc05087932a9770de4199476e13bf | ondrej.pech@domena.cz |
2 | Tomáš Fuk | 1e8cc05087932a9770de4199576e13bf | tomas.fuk&domena.cz |
3 | Tomáš Jedno | 1e8cc05087932a9770de4199576e13bf | tomas.jedno@domena.cz |
### Scripts
name | label | text | creatorId | correctorId | scriptId | ... |
---|---|---|---|---|---|---|
Název 1 | popis | obsah | 1 | 2 | 1 | ... |
Název 2 | popis | obsah | 2 | 2 | 2 | ... |
Název 3 | popis | obsah | 3 | NULL | 4 | ... |
...
$result = Db::queryAll('
SELECT *
FROM scripts
INNER JOIN user u1 ON u1.userId = scripts.creatorId
LEFT JOIN user u2 ON u2.userId = scripts.correctorId
ORDER BY createDate DESC
');
foreach ($result as $u)
{
echo htmlspecialchars($u['creator']);
echo htmlspecialchars($u['corrector'])
}
za aliasem tabulky si měl další alias. (INNER JOIN user u1 AS creator)
Jo, tohle SQL už mi projde, jen asi jsem debil ale jak teď vypíšu v tom cyklu jména těch lidí $u['.....'] v jaké proměnné mám uloženo jméno toho, kdo vytvořil dokument?
dumpni si proměnnou $result a uvidíš, co ti to všechno vrací.
Lepší by taky bylo, kdyby si místo " SELECT * " rovnou vypsal sloupce, které budeš chtít přímo získat z databáze.
např.
SELECT s.scriptId, s.label, s.text, s.name, u1.userName AS creator, u2.userName AS corector
FROM scripts s
INNER JOIN user u1 ON u1.userId = scripts.creatorId
LEFT JOIN user u2 ON u2.userId = scripts.correctorId
ORDER BY createDate DESC
Vyspsal jsem si SQLkem přímo v databázi, co to udělá za výslednou tabulku opravdu tam mám správně oba sloupce se jménem ale oba mají stejný název "userName" šlo by v tom SQL ty sloupce uložit pod svým vlastním názvem například creatorName a correctorName?
v SELECTu si vypiš sloupce tak, jak jsem ti to popsal v mém předposledním příspěvku. Tím aliasem nastavíš sloupci název
Zobrazeno 9 zpráv z 9.