Porovnávání mezi dvěmi tabulkami

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Zuben45
Člen | 268
+
0
-

Dobrý den,
chtěl jsem se zeptat, jestli by bylo možné porovnat data (id a guid) v různých tabulkách a poté vypsat z každé tabulky jen potřebné údaje ? Děkuji

Zkoušel jsem to zatím přes 2 foreach s podmínkou vevnitř, ale marně :/

EDIT: Vyřešeno, ale jen takto:

{foreach $news as $new}
 {var $novinky = $info->where("id = ?",$new->guid) }
  {foreach $novinky as $novinka}
    <section>
    <article>
     <a href="{$basePath}/novinka/{$new->id}/">
      <img src="{$basePath}/images/games/{$novinka->dir}/big.jpg" alt="{$new->name}">
      <div class="title_name">{$new->name}</div>
     </a>
    </article>
   </section>
   {/foreach}
  {/foreach}

nebyl by jednoduší způsob ? Děkuji

Editoval Zuben45 (28. 10. 2013 22:21)

Twista
Člen | 48
+
0
-

Můžeš prosímtě trošku víc popsat co potřebuješ ?

nějak nevím co je $info zač, imo by to šlo vyřešit už v dotazu

Zuben45
Člen | 268
+
0
-

Twista napsal(a):

Můžeš prosímtě trošku víc popsat co potřebuješ ?

nějak nevím co je $info zač, imo by to šlo vyřešit už v dotazu

Nyní jen potřebuji, jestli by to šlo vyřešit nějak elegantněji :)

to $info je tabulka gamelist, tam se nacházejí základní údaje o hře (dir (složka k obrázkům), name, release, studio,…)

Editoval Zuben45 (28. 10. 2013 23:13)

David Matějka
Moderator | 6445
+
0
-

ukaz strukturu db, takhle v tom mam trochu bordel – news, novinky, info, gamelist, guid..

HappyFace
Člen | 162
+
+1
-

hmm podla mna co on len potrebuje tak to si pozriete co su to relacie medzi tabulkami:

„news“ obsahuje nejake zaznami. Podla druheho riadku je evidentne ze tabulka „info“ je v relacii s tabulkou „news“: news.guid ~ 1:n ~ info.id .. hmm len nejak sa mi to nepozdava, mam taky blby pocit, ze je nieco zle navrhnute.
Vyledok je join, ktory len vypisuje v cykle.

Nastav si na tabulkach InnoDB a vytvor foreign key medzi nimi potom uz len staci postupovat podla
dokumentacie.

priklad z doc.:

{foreach $database->table('book')->order('title')->limit(5) as $book}
    <h2>{$book->title} ({$book->author->name})</h2>

    {foreach $book->related('book_tag') as $book_tag}
        {$book_tag->tag->name}{sep}, {/sep}
    {/foreach}
{/foreach}

v podstate tvoj zapis ostava ako je len ten „where(id..“ zmen na ->related a mas to ok :)

Editoval HappyFace (29. 10. 2013 8:16)

Zuben45
Člen | 268
+
0
-

HappyFace napsal(a):

hmm podla mna co on len potrebuje tak to si pozriete co su to relacie medzi tabulkami:

„news“ obsahuje nejake zaznami. Podla druheho riadku je evidentne ze tabulka „info“ je v relacii s tabulkou „news“: news.guid ~ 1:n ~ info.id .. hmm len nejak sa mi to nepozdava, mam taky blby pocit, ze je nieco zle navrhnute.
Vyledok je join, ktory len vypisuje v cykle.

Nastav si na tabulkach InnoDB a vytvor foreign key medzi nimi potom uz len staci postupovat podla
dokumentacie.

priklad z doc.:

{foreach $database->table('book')->order('title')->limit(5) as $book}
    <h2>{$book->title} ({$book->author->name})</h2>

    {foreach $book->related('book_tag') as $book_tag}
        {$book_tag->tag->name}{sep}, {/sep}
    {/foreach}
{/foreach}

v podstate tvoj zapis ostava ako je len ten „where(id..“ zmen na ->related a mas to ok :)

aha, tabulky mám nastavené na InnoDB, ale s foreign key jsem ještě nepracoval, jak to prosím mám nastavit ? (v phpmyadmin jsem to našel, ale nvm co tam mám zadávat, navíc tam nevidím položku reference)

Tak jsem si něco o tom přečetl a udělal to (nastavil index a klíč), ale vyhazuje mi to hlášku:

No reference found for $recenze->related(gamelist)

TAB gamelist

CREATE TABLE IF NOT EXISTS `gamelist` (
  `id` int(30) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `dir` varchar(50) NOT NULL,
  `info` varchar(255) DEFAULT NULL,
  `price_box` int(6) DEFAULT NULL,
  `price_dig` int(6) DEFAULT NULL,
  `link_box` longtext,
  `link_dig` longtext,
  `link_shop` longtext,
  `release` datetime DEFAULT NULL,
  `min_procesor` varchar(50) DEFAULT NULL,
  `opt_procesor` varchar(50) DEFAULT NULL,
  `min_ram` varchar(50) DEFAULT NULL,
  `opt_ram` varchar(50) DEFAULT NULL,
  `min_grafic` varchar(50) DEFAULT NULL,
  `opt_grafic` varchar(50) DEFAULT NULL,
  `min_os` varchar(50) DEFAULT NULL,
  `opt_os` varchar(50) DEFAULT NULL,
  `hdd` varchar(50) DEFAULT NULL,
  `zanr` varchar(50) DEFAULT NULL,
  `singleplayer` varchar(3) DEFAULT NULL,
  `multiplayer` varchar(3) DEFAULT NULL,
  `studio` varchar(50) DEFAULT NULL,
  `distributor` varchar(50) DEFAULT NULL,
  `vydavatel` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

a TAB recenze

CREATE TABLE IF NOT EXISTS `recenze` (
  `id` int(30) NOT NULL AUTO_INCREMENT,
  `guid` int(30) NOT NULL,
  `name` varchar(50) NOT NULL,
  `text` longtext NOT NULL,
  `hodnoceni` int(3) DEFAULT NULL,
  `klad1` varchar(50) DEFAULT NULL,
  `klad2` varchar(50) DEFAULT NULL,
  `klad3` varchar(50) DEFAULT NULL,
  `klad4` varchar(50) DEFAULT NULL,
  `klad5` varchar(50) DEFAULT NULL,
  `zapor1` varchar(50) DEFAULT NULL,
  `zapor2` varchar(50) DEFAULT NULL,
  `zapor3` varchar(50) DEFAULT NULL,
  `zapor4` varchar(50) DEFAULT NULL,
  `zapor5` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `guid` (`guid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

Editoval Zuben45 (29. 10. 2013 18:50)