Autor | Zpráva | ||
---|---|---|---|
Jcas Profil |
#1 · Zasláno: 29. 6. 2014, 16:09:02
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> "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 |
#2 · Zasláno: 29. 6. 2014, 17:09:09
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 |
#3 · Zasláno: 29. 6. 2014, 17:48:57
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 |
#5 · Zasláno: 29. 6. 2014, 19:07:42
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 |
#6 · Zasláno: 29. 6. 2014, 20:07:03
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ší. |
||
Časová prodleva: 10 let
|
0