Autor Zpráva
T-fon
Profil
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
Místo toho škaredého sloupce Účast si udělejte třetí tabulku, kde budou sloupce
id_vyletu, id_jmena
Tím si definujete patřičnou vazbu. Viz. faq.
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
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
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
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.
T-fon
Profil
děkuji, už mi to začíná docházet....

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: