Oznámení
Omlouváme se, provoz fóra byl ukončen
MySQL a vícenásobný JOIN
Upozornění: Tohle vlákno je hodně staré.
před 11 lety
- Domo
- Člen | 2
On je to spíš dotaz na samotné MySQL, ale pohybuje se zde dost programátorských guru než kdekoliv jinde, tak se ptám tady.
Mám tabulky:
tymy:
|-----|------------------------|
| id | nazev |
|-----|------------------------|
| nas | Nashville Predators |
| buf | Buffalo Sabres |
| phi | Philadelphia Flyers |
|-----|------------------------|
zapasy:
|-----|-----------|---------|
| id | domaci_id | host_id |
|-----|-----------|---------|
| 1 | nas | phi |
| 2 | buf | phi |
| 3 | nas | buf |
| 4 | edm | phi |
|-----|-----------|---------|
A pomocí dotazu chci asociovat zároveň tým domácí i hostující. Identifikátory v jednom zápase nemohou být shodné.
Takže vracet něco jako:
|-----|-----------|---------|---------------------|---------------------|
| id | domaci_id | host_id | domaci_nazev | host_nazev |
|-----|-----------|---------|---------------------|---------------------|
| 1 | nas | phi | Nashville Predators | Philadelphia Flyers |
| 2 | buf | phi | Buffalo Sabres | Philadelphia Flyers |
| 3 | nas | buf | Nashville Predators | Buffalo Sabres |
| 4 | edm | phi | NULL | Philadelphia Flyers |
|-----|-----------|---------|---------------------|---------------------|
Zatím jsem schopen pomocí LEFT JOIN dosadit jen domácí tým, což mi nestačí. Dříve jsem to řešil pomocí vybrání všech týmů do assoc pole a přiřazování na úrovni PHP.
Budu rád za každou pomoc!
Edit:
Asociaci domácího týmu provádím zatím takto:
$zapasy = dibi::query ("
SELECT
[z].[domaci_id],
[z].[host_id],
[t].[nazev] AS [domaci_nazev]
FROM
[zapasy] AS [z]
LEFT JOIN
[tymy] AS [t] ON ([z].[domaci_id]=[t].[id])
ORDER BY
[kolo] DESC
");
Editoval Domo (17. 11. 2008 15:38)
před 11 lety
- blacksun
- Člen | 181
<?php
$zapasy = dibi::query ("
SELECT
[z].[domaci_id],
[z].[host_id],
[td].[nazev] AS [domaci_nazev]
[th].[nazev] AS [hoste_nazev],
FROM
[zapasy] AS [z]
LEFT JOIN
[tymy] AS [td] ON ([z].[domaci_id]=[t].[id])
LEFT JOIN
[tymy] AS [th] ON ([z].[host_id]=[t].[id])
ORDER BY
[kolo] DESC
");
?>
před 11 lety
- Domo
- Člen | 2
No, to je ono. Díky za pomoc! Pomohli ty aliasy td a th.
SELECT
[z].[domaci_id],
[z].[host_id],
[td].[nazev] AS [domaci_nazev],
[th].[nazev] AS [hoste_nazev]
FROM
[zapasy] AS [z]
LEFT JOIN
[tymy] AS [td] ON ([z].[domaci_id]=[td].[id])
LEFT JOIN
[tymy] AS [th] ON ([z].[host_id]=[th].[id])
ORDER BY
[kolo] DESC