Autor | Zpráva | ||
---|---|---|---|
T-fon Profil |
#1 · Zasláno: 9. 3. 2012, 12:07:15
Dobrý den, jsem v MySQL začátečník a teď řeším toto: mám tabulku s jmény a ID a druhou tabulku výletů, kde je sloupec Účast a tam mám uvedeny ID jmen, např. 2,5,8. Kdyby tam bylo jedno číslo, tak si umím poradit, ale takhle mne napadlo akorát ty čísla dostat do pole a pak to přes cyklus projet a vypsat. Ale určitě existuje jednodušší a elegantnější řešení, poradí mi prosím někdo?
Ještě bych mel jeden dotaz. V phpMyAdmin přidám do hotové tabulky sloupec a chtěl bych, aby ve všech řádkách měl hodnotu třeba 5. Myslel jsem že je to položka Výchozí-Dle zadání-5, ale ono mi to vypsalo do všeh řáků 0... |
||
Kajman Profil |
#2 · Zasláno: 9. 3. 2012, 12:35:06
Místo toho škaredého sloupce Účast si udělejte třetí tabulku, kde budou sloupce
id_vyletu, id_jmena |
||
Jan Knížek Profil |
Zdravím,
zkuste JOIN, GROUP a GROUP_CONCAT. php.vrana.cz/vypis-dat-ze-zavislych-tabulek.php#group_concat U druhého problému mě napadá přidat sloupec a poté pomocí příkazu UPDATE všechny hodnoty změnit - možná by to šlo efektivněji, ale pokud je akce jednorázová, řešení postačí. EDIT: omlouvám se, Kajman byl rychlejší. |
||
T-fon Profil |
#4 · Zasláno: 9. 3. 2012, 14:53:24
Děkuji za odpovědi. Vytvoření třetí tabulky se mi teda moc nelíbí, když si vezmu, že budu mít 100 výletů a v každym v průměru 6 lidí, tak by to znamenalo vytvořit 600 řádků, jestli to správně chápu? Prostuduju toho Vránu...
|
||
Kajman Profil |
#5 · Zasláno: 9. 3. 2012, 15:46:48
T-fon:
„vytvořit 600 řádků, jestli to správně chápu?“ Ano. Tak se s relačními databázemi pracuje a jsou na to optimalizované, viz. http://www.manualy.net/article.php?articleID=13 |
||
T-fon Profil |
Tak jsem podle vašich rad vytvořil třetí tabulu s názvem ucast a pozkami id_vyletu a id_jmena. Podle návodu na php.vrana.cz jsem stvořil tento dotaz:
SELECT vylety2007.vylety_id, vylety2007.trasa, ......, GROUP_CONCAT(jmena.jmeno) AS skupina FROM vylety2007 LEFT JOIN ucast ON vylety2007.vylety_id = ucast.id_vyletu LEFT JOIN jmena ON ucast.id_jmena = jmena.jmena_id GROUP BY vylety2007.vylety_id funguje přesně jak má, ale chtěl jsem vás poprosit, jestli by byl někdo ochoten mi vysvětlit, jak přesně ten GROUP_CONCAT A GROUP BY funguje? já ten kód vůbec nechápu... |
||
Jan Knížek Profil |
#7 · Zasláno: 11. 3. 2012, 17:51:51
Příkaz JOIN spojí řádky obou tabulek podle kritéria ON. Více např. zde: www.linuxsoft.cz/article.php?id_article=837.
GROUP jen seskupí řádky se stejnou hodnotou, v tomto případě výlety se stejným ID. Více zde: www.linuxsoft.cz/article.php?id_article=864. A nakonec příkaz GROUP_CONCAT vypíše spojení všech jmen skupin do jednoho řetězce. Takto například také funguje COUNT (počet záznamů), či SUM (součet záznamů). Odkaz viz. výše. |
||
Časová prodleva: 3 dny
|
|||
T-fon Profil |
#8 · Zasláno: 14. 3. 2012, 11:22:49
děkuji, už mi to začíná docházet....
|
||
Časová prodleva: 11 let
|
0