Jump to content
php.lv forumi

Kurš būtu labākais veids kā skaitīt tagus?


shurix

Recommended Posts

Vajadzīgs izveidot atslēgvārdu mākoni. Viss būtu labi tikai nezinu pareizāko veidu kā skaitīt visus tagus. Ja pie katra ieraksta ir kādi 5 tagi un ieraksti ir daudz tad katru reizi pie lapas ielādes skaitīt viņus pa jaunu laikam nebūtu gudri? Izdomāju variantu kaut kā ar cron ik pa stundai. Vai arī pēc katra pievienotā ieraksta pārbaudīt vai tādi tagi jau ir un veikt pieskaitīšanas darbību. Bet arī ja viņu ir baigi daudz tas arī būs lēnu?

Link to comment
Share on other sites

Nē. Izveidot tabulu "atlēgvārdi", kur glabāt atslēgvārdu, tā id un valodu - tas būs kombinētais ID, kā arī protams pašu atslēgvārdu (vārdus), izveidot arī kolonu "count", kur glabās reižu skaitu, cik reizes atslēgvārds parādās. Tad pieņemsim, ka tev ir galvenā ierakstu tabula (kā tam vajadzētu būt), kur katram ierakstam var pievienot atslēgvārdus. Vajag šo ierakstu tabulu ar starptabulu sasaistīt ar attiecīgajiem atslēgvārdiem no atslēgvārdu tabulas. Starptabulai var būt divas kolonas - ieraksta ID, atslēgvārda ID, viss. Tikai vēlami FK (Foreign Key) abiem ID ar CASCADE variantu, lai dzēšot ierakstu, automātiski izdzēšas ar šo ierakstu saistītie starptabulas ieraksti un tas pats arī ar tagiem - dzēšot tagus.

Tagad pie katra ieraksta izveides/dzēšanas/rediģēšanas tiek izpildīts "triggeris", kurš dzēš vai pievieno vai arī atstāj kā ir - ierakstus no ierakstu un atslēgvārdu starptabulas, kā arī "updeito" count vērtību atslēgvārdu tabulā. Vēl var protams, darīt tā, ka to "count" kolonu neveidot, bet skaitīt pie katra pieprasījuma no starptabulas - nezinu, kas būtu labāk no veiktspējas viedokļa. Var arī nepildīt trigeri, bet piekodēt klāt ieraksta modelim klāt vienkārši attiecīgās darbības - SQL pieprasījumus.

Ieguvumi:

1. Visi atslēgvārdi glabājas vienā tabulā, kur tie ir pieejami no jebkuras vietas aplikācijā.

2. Lielākā noslodze parādās tikai pie ierakstu rediģēšanas, kas visticamāk būs krietni retāk izsaukts process, nekā parastie apskates pieprasījumi. Pie tam - arī šeit nekāda dižā noslodze nebūs, ja viss būs pareizi uztaisīts.

3. Iespēja darīt datubāzei to, kas ir domāts datubāzei, bet aplikācijai darīt to, kas ir domāts tai.

Link to comment
Share on other sites

Izdomāju kaut kādu savu variantu ar 2 tabulām.

Viena jaunumiem otra tagiem. Jaunumu tabulā glabā katra taga id atdalot tos ar komatu (1,2,3,5,7,8). Tagu tabulā glabā taga id, nosaukumu un reizes.

Kad vajg parādīt tagus konkrētajam jaunumam explodē (1,2,3,5,7,8) un izvada attiecīgos. Pie pievienošanas un dzēšanas mazliet piņķerīgāk.

Link to comment
Share on other sites

Tieši tāpēc nevajag neko ar komatiem atdalīt - jo piņķerīgāk.

Vajag starptabulu taisīt - tipiskis N:N relācijas risinājums:

jaunumi (id, nosaukums, apraksts, ...)
tagi (id, nosaukums, skaits)
jaunumu_tagi (taga_id, jaunuma_id)

 

Un šādi, piemēram, dabū visus tagus konkrētajam jaunumam:

SELECT tagi.nosaukums FROM tagi JOIN jaunumu_tagi ON tagi.id = jaunumu_tagi.taga_id WHERE jaunumu_tagi = $jaunuma_id

 

Ja vajag pievienot/izdzēst jaunu/vecu tagu - ieliek/izdzēš ierakstu no tagi tabulas.

Vajag pievienot jaunumam kādu tagu - pievienot ierakstu jaunumu_tagi tabulai.

Utt..

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...