Porovnávání mezi dvěmi tabulkami
- Zuben45
- Člen | 268
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)
- Zuben45
- Člen | 268
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
ukaz strukturu db, takhle v tom mam trochu bordel – news, novinky, info, gamelist, guid..
- HappyFace
- Člen | 162
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
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)