Jump to content
php.lv forumi

vajag saskaitīt cik ierakstu atkārtojas ar noteiktu vērtību


Jay Kay

Recommended Posts

man ir tabula, kurā es glabāju komentus rakstiem

 

komenta_id

raksta_id

komentārs

autors

utt..

 

man vajag saskaitīt, cik komentāru ir rakstiem ar id, piem., 39 un 69.

 

zinu, ka vairākas vērtības norāda ar

 

'where `raksta_id` in (39,69)'

 

taču man neatgriež to, ko vajag

 

palīdziet, lūdzu!

Link to comment
Share on other sites

SELECT count(*) FROM comments WHERE aid IN (39,69) GROUP BY aid

 

bet optimālā variantā es ieteiktu rakstu tabulā glabāt komentāru skaitu un pie komentāra pievienošanas vai dzēšanas uztaisīt

UPDATE articles SET comment_count=(SELECT count(*) FROM comments WHERE aid=39) WHERE aid=39

 

un tad atlasot rakstus uzreiz atlasīt arī komentāru skaitu

 

SELECT id, title, text, comment_count FROM articles WHERE aid IN (39,69)

 

Tā ir izdevīgi darīt, jo komentāru pievienošana ir 100-tiem, ja ne pat 1000-šiem reižu retāks process, ka komentāru skaita pie rakstiem atlasīšana, tāpēc tīri performances dēļ, ir vērts šo vērtību kešot rakstu tabulā.

Edited by codez
Link to comment
Share on other sites

tātad no divām tabulām `raksti` un `comments` es kaut kā šādi izdomāju:

 

 


SELECT `raksti`.`raksta_id`, `raksti`.`virsraksts`, count( `comments`.`id` ) AS `kom_sk`
FROM `raksti`
LEFT JOIN `comments` ON `raksti`.`raksta_id` = `comments`.`raksta_id`
WHERE `raksti`.`raksta_id` in (12,39,62)

 

un it kā strādā,

 

bet gaidīšu aizrādījumus no pieredzējušiem cilvēkiem, ja es, izmantojot šādu kvēriju, varbūt neesmu kaut ko paredzējis

Link to comment
Share on other sites

marrtins, jā, bet tad ir ļoti uzmanīgi šī funkcija jāpielāgo katrā vietā - piemēram, admins izdzēš vienu komentāru comments=comments-1, admins izdzēš teiksim visus viena lietotāja komentārus - jāskaita cik rowi izdzēsti un tik jāatņem. Vairāk kods jāraksta. Un tikko kaut viena šāda darbība pielaiž kļūdu, tā kļūda turpinās pēc katras darbības, kamēr manā variantā, ja teiksim kādā vietā aizmirstu update ielikt, kļūda pazudīs pēc nākamās darbības, kurai ir update. Praksē ir nācies novērot ne vienu vien lapu, kur pēc komentāru dzēšanas vai adminu darbībām, komentāru skaits ir nepareizs.

Tā kā šāds update ir salīdzinoši rets, attiecībā pret citām darbībām, tad koda vienkāršošanai un iespējamo kļūdu riska samazināšanai, ieteiktu izmantot šādu variantu.

Link to comment
Share on other sites

Jay Kay, GROUP BY neaizmirsi?

 

pēc būtības tāds variants kā tev ieplānots trādās, bet iedomājies, ja tev tagad jaselektē 20 raksti un katram no tiem ir n-tie komentāri un tu stabilitātei izmanto innodb engini, tad db ir diezgan darbiņš, lai šo visu informāciju savāktu katru reizi, kad lietotājs ieiet lapā ar šo rakstu sarakstu.

Link to comment
Share on other sites

Šādi te var ari :)

SELECT count(*) FROM comment WHERE news_id = '$id'

$id = $row_news['id'];

Ceru ka šis varijants vairāk dos izprast kā tas darbojas :) !

Edited by Faks
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...