Autor | Zpráva | ||
---|---|---|---|
jakuje Profil * |
#1 · Zasláno: 3. 1. 2007, 15:49:26
Začal jsem se trochu zajímat o složitější MySQL dotazy. Na www.linuxsoft.cz jsou celkem pěkně popsané, ale narazil jsem na prblém u spojení tabulek N:1 - Data z databáze vytáhnu jední příkazem, ale už mě nenapadá jak je vypsat, když je to jeden řádek z jedné tabulky a třeba 5 z druhé. Normálně vypisuji pomocí funkce mysql_fetch_array().
|
||
nightfish Profil |
#2 · Zasláno: 3. 1. 2007, 15:55:36
jakuje
nejlepší to bude uvést na příkladu konkrétního dotazu... takže si zkus nějaký vymyslet |
||
jakuje Profil * |
#3 · Zasláno: 3. 1. 2007, 16:07:46
konkrétně ...
mám jednu tabulku kde mám id, nadpis, celkový popis a závěr. Potom mám druhou kde je id, id řádku z první tabulky, třeba nějakej obrázek a popis k němu. Potom to vytáhnu SQL dotazem jako SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id A ve výpisu by měl vypadnout celkový nadpis, celkový popis, pak celkový popis, potom všechny obrázky s popiskama z druhé tabulky a nakonec závěr. |
||
k Profil * |
#4 · Zasláno: 3. 1. 2007, 16:14:40
nedavej do selectu hvezdicku
select t1.id, t1.nadpis, t2.id from .... a pak to pomoci mysql_fetch_assoc nebo mysql_fetch_array dostanes do pole. |
||
k Profil * |
#5 · Zasláno: 3. 1. 2007, 16:16:33
takze
select t1.id as id, t1.nadpis as nadpis, t2.id as id2 from ... vystup: array( id=>value nadpis=>value id2=>value) |
||
nightfish Profil |
#6 · Zasláno: 3. 1. 2007, 16:21:40
takhle nějak...
$result = mysql_query("select t1.id as id, t1.nadpis as nadpis, t2.id as id2 from..."); |
||
jakuje Profil * |
#7 · Zasláno: 3. 1. 2007, 16:25:57
Něco takového mě taky napadlo, ale říkal jsem si jestli to nejde nějak eledantněji. I tak děkuji. A myslíte že je to rychlejší než 2 selecty?
Jako jeden z t1 a druhý z t2 do cyklu. |
||
k Profil * |
#8 · Zasláno: 3. 1. 2007, 16:54:06
U MySQL jsou rychlejsi vnorene selecty nez joiny. Jestli jsi teda myslel tohle.
|
||
nightfish Profil |
#9 · Zasláno: 3. 1. 2007, 16:56:54
k
U MySQL jsou rychlejsi vnorene selecty nez joiny. Jestli jsi teda myslel tohle. imho ne... jakuje chce, pokud jsem to správně pochopil, udělat jeden select na tabulku t1 a potom v cyklu pro každý řádek výsledku provádět select do tabulky t2, který bude v dalším cyklu vypisovat... jednoznačně bych se klonil k řešení s joinem (ale jako cvičení si můžeš naprogramovat obojí a testovat, co je při jakých objemech dat rychlejší :-)) |
||
jakuje Profil * |
#10 · Zasláno: 3. 1. 2007, 17:32:41
Ne. Jední selectem si vyberu nadpis atd a druhým udělám vpodstatě to co vy v tom přílkadě, ale bez té podmínky.
|
||
nightfish Profil |
#11 · Zasláno: 3. 1. 2007, 17:42:07
aaaaha, tak to jsem tě hned na začátku špatně pochopil
pakliže ti první dotaz vždy vrátí 1 řádek výsledku (tzn. víš které id chceš zobrazit), tak pak nemá smysl řešit joiny... |
||
k Profil * |
#12 · Zasláno: 3. 1. 2007, 17:42:21
jakuje
No trochu si asi nepochopil podstatu joinu. Join ti vlastne nahradi nejaky cyklus ktery bys musel pouzit. Join bys pouzil v pripade ze neznas predem id(v tvem pripade cislo 1). Pro priklad ktery uvadis nema moc smysl pouzivat joiny. |
||
k Profil * |
#13 · Zasláno: 3. 1. 2007, 17:42:57
eh tak nightfish me predbehl:)
|
||
jakuje Profil * |
#14 · Zasláno: 3. 1. 2007, 17:57:09
no tak jo ... Tak díky vám oběma :)
|
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0