| Autor | Zpráva | ||
|---|---|---|---|
| Jont Profil |
#1 · Zasláno: 20. 5. 2009, 20:40:42
Ahoj,
dělám teď databázi a narazil jsem na jeden problém, s kterým si nevím rady. Chtěl bych u každého, řekněme článku, mít jeho tagy (ty krátké popisky, co znáte). Takže mám tabulku clanky a tam třeba sloupec tagy. Jde do toho pole uložit více tagů? Jako že by by byly třeba odděleny středníkem nebo nějak. Pak ale právě nevím jak pak vypsat všechny ty tagy a jak s nimi dále pracovat. Je lepší mít zvláštní tabulku tagy a do toho pole dát jenom id toho tagu? Nebo se to dělá nějak jinak? To stejné se hodí třeba pro uložení oblíbené položky uživatele (třeba oblíbená jídla nebo něco). Opravdu by mě to zajímalo, poraďte prosím. |
||
| tiso Profil |
#2 · Zasláno: 20. 5. 2009, 20:43:05
Vzťah tabuliek clanky:tagy je m:n, takže sa to rieši tromi tabuľkami:
clanky(id, ...) tagy(id, ...) clanky_tagy(clanek_id, tag_id) |
||
| yFang Profil |
#3 · Zasláno: 20. 5. 2009, 20:44:03 · Upravil/a: yFang
Jont
Budeš mít tři tabulky: clanky -< clanky_tagy >- tagy A ve spojovací tabulce (clanky_tagy) budeš ukládat id článku a tagu. * Pozdě. :) |
||
| keeehi Profil |
#4 · Zasláno: 20. 5. 2009, 20:48:26
tagy by klidně v DB mohly být uloženy a jednom sloupci a odděleny středníkem.
při výstupu z db se použije funkce explode |
||
| Jont Profil |
#5 · Zasláno: 20. 5. 2009, 20:58:16
Takže když budou ke článku 4 tagy, tak v té tabulce clanky_tagy budou 4 řádky, jo?
No to mě taky napadlo, ale není to nějak neekonomické? Ta tabulka pak bude kilometr dlouhá :). |
||
| tiso Profil |
#6 · Zasláno: 20. 5. 2009, 21:04:19 · Upravil/a: tiso
Jont - všetko záleží od toho čo s článkami a tagmi chceš robiť... Základ je navrhnúť databázu podľa pravidiel, dosiahnuť niektorú normálovú formu. Denormalizácia nastupuje až potom.
|
||
| Jont Profil |
#7 · Zasláno: 20. 5. 2009, 21:27:09
Já se v těch pojmech moc nevyznám a nějaká pravidla moc neovládám. Každopádně bych asi jen chtěl ty tagy zobrazit u článku a pak udělat nějaké mračno.
keeehiA jak je pak vypsat? Asi by to chtělo zjistit, kolik tam těch tagů je. V polích se moc nevyznám, je na to nějaká funkce? |
||
| tiso Profil |
#8 · Zasláno: 20. 5. 2009, 21:37:42
Jont - keď sa nevyznáš, tak študuj...
|
||
| keeehi Profil |
#9 · Zasláno: 20. 5. 2009, 22:21:32
primitivní vypsání může vypadat takto:
//do proměnné $tagy se už předtím umístily tagy oddělené středníkem
$tagy_pole = explode(";",$tagy);
foreach($tagy_pole as $tag)
{
echo "Tag ".++$i." je: ".$tag.".<br>\n";
}
|
||
| Mastodont Profil |
#10 · Zasláno: 20. 5. 2009, 22:42:42
Jont
Počet řádků v db tabulkách většinou není omezen, buď v klidu. |
||
| Kajman_ Profil * |
keeehiova verze přináší komplikace pokud podle tagů chcete i vyhledávat atp. databáze nebude moci použít indexy, takže to bude zbytečně pomalé.
Použite to, co radí tiso, četnost tagů zjistíte jednoduše select tag_id, count(*) pocet from clanky_tagy group by tag_id a např. takovouhle jednoduchou věc prostě v keeihově návrhu databáze nedokáže. |
||
| Jont Profil |
#12 · Zasláno: 21. 5. 2009, 15:55:26
Ok, tak udělám tu zvláštní tabulku, přece jen to bude lepší. Dík za radu.
|
||
| Jont Profil |
#13 · Zasláno: 22. 5. 2009, 19:45:31
Ještě dotaz: Jak ty tagy seřadím podle četnosti? Nějak přes order by asi, ale co tam dát, to nevím.
|
||
| Jont Profil |
#14 · Zasláno: 22. 5. 2009, 21:13:22
Určitě to nějak jde, ne? Nebo musím k tagu ukládat jeho počet?
|
||
| nightfish Profil |
#15 · Zasláno: 22. 5. 2009, 21:32:10
... order by count(tag_id) desc |
||
|
Časová prodleva: 4 dny
|
|||
| Jont Profil |
#16 · Zasláno: 26. 5. 2009, 23:44:20
A kam se to má dát? Když to dám takhle: GROUP BY tag_id order by count(tag_id) desc tak píše invalid use of group function a obráceně mám prý chybu v syntaxi. Jsem z toho jelen.
|
||
| Kajman_ Profil * |
#17 · Zasláno: 27. 5. 2009, 09:26:48
Tyto dvě varianty by měly fungovat...
select tag_id, count(*) pocet from clanky_tagy group by tag_id order by 2 desc select tag_id, count(*) pocet from clanky_tagy group by tag_id order by pocet desc |
||
|
Časová prodleva: 16 let
|
|||
0