Autor Zpráva
Jcas
Profil
1. tabulka => jeden řádek
2. tabulka => 3 řádky patřící k záznamu z první tabulky.

Zobrazení
<p> Data z první tabulky
     <span>Data z druhé tabulky</span>
     <span>Data z druhé tabulky</span>
     <span>Data z druhé tabulky</span>
</p>

Jak se to správně dělá? Dělá se to jedním dotazem a pak se to selektuje na úrovni php, nebo se udělá nějaký poddotaz, či druhý dotaz v cyklu while?
Jde o to, že při klasickém spojení tabulek získám:
<p>
Data z první tabulky<span>Data z druhé tabulky</span>
Data z první tabulky<span>Data z druhé tabulky</span>
Data z první tabulky<span>Data z druhé tabulky</span>
</p>
Ale já "data z první tabulky" nepotřebuji 3*. Ten řádek mi stačí vybrat jednou a k němu data z druhé tabulky.
Takže vybírá se to 3* a pak se to selektuje na výpisu, nebo je forma dotazu, kdy se to vybere jednou?
RastyAmateur
Profil
Moc to nechápu, ale v MySQL (podle mě) musíte udělat sloupec s ID a dát tam samovyplňování (číslování), a pak dáte jen:

SELECT * FROM nazev_tabulky_1 WHERE ID = 1; 
SELECT * FROM nazev_tabulky_2 WHERE ID = 1,2,3;
Tori
Profil
Jcas:
Ale já "data z první tabulky" nepotřebuji 3*. Ten řádek mi stačí vybrat jednou a k němu data z druhé tabulky.
Takže vybírá se to 3* a pak se to selektuje na výpisu, nebo je forma dotazu, kdy se to vybere jednou?
Záleží asi na tom, kolik dat z první tabulky čtete, násobeno maximálním možných počtem odpovídajících řádků z druhé tabulky. Pokud by se mnohokrát přenášela z DB do PHP ta samá, hodně velká část dat, tak bych byla pro dva samostatné dotazy. Pokud je redundantních dat málo, tak jeden dotaz s JOINem.
juriad
Profil
Relevantní článek od Jakuba Vrány: http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php
V každém případě to vyžaduje netriviální logiku v PHP.
Jcas
Profil
Takže po pročtení článku je jasné, že msuím ještě rozlišovat jednu úroveň. Není to pouze rozhodování mezi jedním či více dotazů. V podstatě má tři úrovně.
1. Jeden dotaz
2. Více přímočarých dotazů - říká tomu konstantní počet dotazů.
3. dotazy vnořené do cyklu.

Tedy trojku rovnou zavrhnem a pak už je jediná otázka. Co je to málo? Co je hodně velké množství přenášených dat?

V mém připadě je to asi jedno. Já jsem v kategorii "málo", ale stejně by mě to zajímalo. A to ne v bytech, protože laik si těžko dokáže představit, kolik ty záznamy zaberou a kolik se skutečnečně přenáší.

Řekněme, že máme 6 sloupců a z toho jsou 3 int (obyč 1-4 ciferné číslo) a 3 jsou varchar.
Kolik je moc? 100 řádků, 1000 řádků, 10 000 řádků
juriad
Profil
Jcas:
Změř si to funkcí microtime, kterou zavoláš před a po.
Ty dotazy jsou obvykle natolik jednoduché, že ti nezabere ani hodinu to naprogramovat dvěma způsoby a vybrat ten lepší.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0