Jay Kay Posted January 26, 2011 Report Share Posted January 26, 2011 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! Quote Link to comment Share on other sites More sharing options...
marcis Posted January 26, 2011 Report Share Posted January 26, 2011 http://dev.mysql.com/doc/refman/5.5/en/counting-rows.html SELECT `raksta_id`, COUNT(*) FROM `tabula` WHERE `raksta_id` IN (39, 69) GROUP BY `raksta_id` Quote Link to comment Share on other sites More sharing options...
codez Posted January 26, 2011 Report Share Posted January 26, 2011 (edited) 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 January 26, 2011 by codez Quote Link to comment Share on other sites More sharing options...
Jay Kay Posted January 26, 2011 Author Report Share Posted January 26, 2011 Liels paldies! biju tā arī domājis, taču pietrūka galā "GROUP BY" steitments, citādi atlasīja vienu rowu tikai. Quote Link to comment Share on other sites More sharing options...
marrtins Posted January 26, 2011 Report Share Posted January 26, 2011 codez, bet vēl optimālākā variantā UPDATE comment_count=comment_count+1 vai comment_count=comment_count-1 atkarībā no operācijas. Quote Link to comment Share on other sites More sharing options...
Jay Kay Posted January 26, 2011 Author Report Share Posted January 26, 2011 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 Quote Link to comment Share on other sites More sharing options...
codez Posted January 26, 2011 Report Share Posted January 26, 2011 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. Quote Link to comment Share on other sites More sharing options...
codez Posted January 26, 2011 Report Share Posted January 26, 2011 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. Quote Link to comment Share on other sites More sharing options...
marrtins Posted January 26, 2011 Report Share Posted January 26, 2011 codez, nu es, protams, šādiem counteriem izamantoju tikai trigerus. Savādāk jau nu toč nevar novaldīt. Quote Link to comment Share on other sites More sharing options...
Faks Posted January 31, 2011 Report Share Posted January 31, 2011 (edited) Šā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 January 31, 2011 by Faks Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.