Výpis informací přes cizí klíče, dvě tabulky

callda
Člen | 8
+
0
-

Dobrý den,

mám dvě tabulky. V jedné mám 3 cizí klíče + primární klíč a ve druhé mám pouze primární klíč.
Z tabulky s cizími klíči se snažím získat další detailní informace.

Všechno funguje jak má, ale vždy se mi vypíši pouze informace k jednomu klíči místo všech tří (vypíše se správně). Dá se nějak obohatit select o výběr daného cizího klíče (přímo zvolit ten daný klíč)?

Funguje asi nějak takhle.. v tabulce, kde mám tři cizí klíče mám číslo například 1 a ze druhé tabulky chci získat informace přes primární klíč jako je například jméno, příjmení atd..

Díky za odpověď.

V Presenter mám:

$this->template->nette = $this->database->table('TabulkaSCizimiKlici')
        ->select('ciziklic1, ciziklic2, ciziklic3');

V šabloně mám:

{foreach $nette as $v}

        {$v->TabulkaZeKtereChciInfo->jmeno}
        {$v->TabulkaZeKtereChciInfo->prijmeni}

{/foreach}
David Matějka
Moderator | 6445
+
0
-

ahoj, pomohlo by, kdybys ukazal konkretni priklad

callda
Člen | 8
+
0
-

David Matějka napsal(a):

ahoj, pomohlo by, kdybys ukazal konkretni priklad

Prvně děkuji za reakci.

FOTKY: Schéma databáze, příklad, tabulky

Presenter (fungující ukázka je v přiloženém odkaze)

public function renderDefault()
    {
     $this->template->soupisky = $this->database->table('soupisky')

        ->select('soupisky.hraci_brankar1, soupisky.hraci_brankar2, soupisky.hraci_brankar3')

        ->where('soupisky.hraci_brankar3 = hraci.id');
    }

Šablona (fungující výpis rovněž v přiloženém odkaze)

{foreach $soupisky as $row}

            <div class="soupiskyGrid_pozice_rozhrani_vek">   </div>
              <div class="soupiskyGrid_pozice_rozhrani_infobox">
                <div class="soupiskyGrid_pozice_rozhrani_infobox_jmeno">


   <b>  {$row->hraci->jmeno}  {$row->hraci->prijmeni} </b>

                </div>
                <div class="soupiskyGrid_pozice_rozhrani_infobox_klub">
                    {$row->hraci->klub}
                </div>
              </div>

      {/foreach}

Abych to nějak shrnul. Mám dvě tabulky, v jedné tabulce mám informace, které chci získat. Ve druhé tabulce mám cizí klíče, které odkazují do tabulky ze kterých chci získat konkrétní informace. V tomhle případě, co jsem tu napsal, mi funguje výpis pouze pro jeden cizí klíč (soupisky.hraci_brankar3), když to změním například na soupisky.hraci_brankar2, tak mi to nevypíše nic a ani mi to nehodí chybu (chybu to hodí, až soupisky.hraci_brankar3 odstraním ze selectu).

A moje otázka je, zda jde nějak zvolit pro výpis cizí klíč (že bych si třeba udělat více těch selectů, ale abych si ten cizí klíč sám mohl vybrat) nebo aby mi to prostě z celého jednoho idéčka vypsalo všechny cizí klíče. A ještě další otázka, zda si můžu třeba tohle {$row->hraci->klub} doplnit nějak o ten konkrétní cizí klíč třeba takhle.. {$row->hraci->klub (pro cizí klíč soupisky.hraci_brankar2) }.

Snad to dává aspoň trošku smysl.

David Matějka
Moderator | 6445
+
+1
-
  1. smaž z toho dotazu select a where
  2. se současným návrhem pak můžeš v šabloně použít něco jako
{$row->ref(hraci_brankar1)->jmeno}
{$row->ref(hraci_brankar1)->prijmeni}

{$row->ref(hraci_brankar2)->jmeno}
{$row->ref(hraci_brankar2)->prijmeni}

3. pokud by za těma sloupečkama byl suffix _id (tedy hraci_brankar1_id), tak by stacilo zapsat

{$row->hraci_brankar2->jmeno}

4. mel bys upravit návrh databáze. až tam budeš mít i všechny hráče, tak bys měl sloupečky hraci_utocnik1 až hraci_utocnik15? :) přečti si něco o normalizaci databáze. v tvém případě by v tabulce soupisky mělo být jen obecné informace o soupisce – jako id, team, případně rok nebo trenér (i když těch taky může být víc) a pak budeš mít další tabulku soupiska_hraci, kde budou sloupecky soupiska_id, hrac_id, pozice. pro každého hráče v soupisce pak budeš mít záznam v téhle tabulce. a poté to budeš procházet přes

{foreach $row->related('soupiska_hraci') as $soupiskaHrac}
	{$soupiskaHrac->pozice}
	{$soupiskaHrac->hrac->jmeno}
{/foreach}
callda
Člen | 8
+
0
-

David Matějka napsal(a):

  1. smaž z toho dotazu select a where
  2. se současným návrhem pak můžeš v šabloně použít něco jako
{$row->ref(hraci_brankar1)->jmeno}
{$row->ref(hraci_brankar1)->prijmeni}

{$row->ref(hraci_brankar2)->jmeno}
{$row->ref(hraci_brankar2)->prijmeni}

3. pokud by za těma sloupečkama byl suffix _id (tedy hraci_brankar1_id), tak by stacilo zapsat

{$row->hraci_brankar2->jmeno}

4. mel bys upravit návrh databáze. až tam budeš mít i všechny hráče, tak bys měl sloupečky hraci_utocnik1 až hraci_utocnik15? :) přečti si něco o normalizaci databáze. v tvém případě by v tabulce soupisky mělo být jen obecné informace o soupisce – jako id, team, případně rok nebo trenér (i když těch taky může být víc) a pak budeš mít další tabulku soupiska_hraci, kde budou sloupecky soupiska_id, hrac_id, pozice. pro každého hráče v soupisce pak budeš mít záznam v téhle tabulce. a poté to budeš procházet přes

{foreach $row->related('soupiska_hraci') as $soupiskaHrac}
	{$soupiskaHrac->pozice}
	{$soupiskaHrac->hrac->jmeno}
{/foreach}

Díky, už to funguje, jak jsem si představoval.
Nad úpravou databáze určitě popřemýšlím.