hu_ha Posted February 6, 2004 Report Share Posted February 6, 2004 (edited) ir atbildeets :\ ir divas tabulas: tab_a ------------- id | name ------------- 1 | a 2 | b 3 | c 4 | d tab_b ---------------- k_id| id_kom ---------------- 1 | 2 2 | 3 3 | 2 4 | 2 id un k_id ir primary key autoincrement vaiceejuma rezultaataa vajadzeetu ieguut: rez -------------------------- name| id_kom_skaits -------------------------- a | 0 b | 3 c | 1 d | 0 taisu vaicaajumu: select name, count(id_kom) form tab_a,tab_b where tab_a.id=tab_b.id_kom group by id_kom tiek atgriezti b=3 un c=1 vajag lai tiktu atgriezti arii rezultaati, kur a=0 un b=0 Edited February 7, 2004 by hu_ha Link to comment Share on other sites More sharing options...
Roze Posted February 6, 2004 Report Share Posted February 6, 2004 Pameegjini select name, count(id_kom) from tab_a left join tab_b ON (tab_a.id=tab_b.id_kom) group by id_kom Link to comment Share on other sites More sharing options...
hu_ha Posted February 6, 2004 Author Report Share Posted February 6, 2004 ok ir, lielais paldies :) Link to comment Share on other sites More sharing options...
hu_ha Posted February 6, 2004 Author Report Share Posted February 6, 2004 select name, count(id_kom) from tab_a left join tab_b ON (tab_a.id=tab_b.id_kom) group by id_kom tomeer nav iisti pareizi, shitais variants straadaa ja tabulaa "tab_b" ir vismaz par vienu ierakstu vairaak kaa "tab_a". dotajaa gadiijumaa man atgriezh rezultaatu: -------------------------- name| id_kom_skaits -------------------------- a | 0 b | 3 c | 1 truukst rindinja kur d=0 kaut kaa savaadaak vajadzees.. Link to comment Share on other sites More sharing options...
hu_ha Posted February 7, 2004 Author Report Share Posted February 7, 2004 nus vai tieshaam neviens nevar atbildeet? shitais ir standarta variants maajas lapaam, kad tiek paraadiits komentaaru skaits pie katra raksta... tikai negribas taisiit 2vus vaicaajumus: select * from raksts while ... { select count(*) from komentaars where id=raksta_id } gribeetos to uzmociit vienaa vaicaajumaa... vai tas ir iespeejams jeb tomeerj jaamoca vaicaajums ciklaa? Link to comment Share on other sites More sharing options...
Kaklz Posted February 7, 2004 Report Share Posted February 7, 2004 truukst rindinja kur d=0kaut kaa savaadaak vajadzees.. Neesi pats kaut kādu limit uzlicis vai tabulas datus nomainījis? Link to comment Share on other sites More sharing options...
hu_ha Posted February 7, 2004 Author Report Share Posted February 7, 2004 nu reku ir mysql control center izveidotas 2vas tabulas un izpildiits vaicaajums, kaa arii rezultaats... vajadzeetu, lai paraadiitos arii 4taa rindinja, kur d=0... Link to comment Share on other sites More sharing options...
jb4 Posted February 7, 2004 Report Share Posted February 7, 2004 Ja tu gribi, lai parādās ar dažādiem vārdiem (a,b,c,d), tad jāraksta: select name, count(id_kom) from tab_a left join tab_b ON (tab_a.id=tab_b.id_kom) group by name Tu lietoji: select name, count(id_kom) from tab_a left join tab_b ON (tab_a.id=tab_b.id_kom) /*group by id_kom*/ Ja noņem group by ..., tad sanāk, ka tu izvēlies 4 ierakstus. Ar group by tiek sagrupēti tie lauki, kuros ir vienāds lauciņš pēc kura tiek veidots group by, tavā gadījumā - id_kom. Tā kā gan c gan d ir 0 komentāru (tu grupē pēc id_kom, kas viņiem abiem ir NULL), tie sagrupējoties viens otru pārklāj un tu rezultātos redzi tikai pirmo - c. Visbeidzot, vajadzētu mēģināt izvēlēties tādu tabulas kolonnu nosaukumus, kas kaut ko pastāsta par savu būtību: k_id un id_kom - nekas pašsaprotamāks nav redzēts pēdējos simt gados. Iesaku izmainīt uz: 1) tabula: entry_id entry_name 2) tabula comm_id comm_entry Bez tam, tabulu nosaukumos izmantot vārdu priedēkli tab vai table ir tas pats, kas tevi saukt nevis, piemēram par Mārtiņu, bet par CilvēkMārtiņu. Tabulām parasti dod nosaukumu pēc to satura. Ja tā satur bloga ierakstus, tad entries (daudzskaitlī). Ja tā satur komentārus, tad comments un nevis comment_table, comment, tab_a, tab_comm u.tml. Pirms comments var uzlikt priedēkli, lai gadienā ja uz vienas bāzes ir vairākas līdzīgs sistēmas, varētu atšķirt, piemēram: test_entries, test_comments, production_entries, production_comments. Link to comment Share on other sites More sharing options...
hu_ha Posted February 7, 2004 Author Report Share Posted February 7, 2004 vo, beidzot ir, lielais paldies. tagad ja paraada kaa vajadzeeja tad liekas stipri logjiski ka taa vajadzeeja dariit, bet taapat dabesiijos un nevareeju iebraukt.. btw: par tabulu nosaukumiem utt. shiis divas tabulas tika izmantotas, lai tiku pie vajadziigaa rezultaata un ir tikai gabalinjsh no vaicaajuma.. liidz ar to tabulu nosaukumi ir pavisam citi utt.. veelreiz paldies Link to comment Share on other sites More sharing options...
Roze Posted February 10, 2004 Report Share Posted February 10, 2004 My fault - fiksi rakstiiju neiistais ORDER BY nepanjeemaas.. Link to comment Share on other sites More sharing options...
gigis Posted December 7, 2005 Report Share Posted December 7, 2005 Uzdevums tas pats - komentāru saskaitīšana rakstiem Sākotnēji bija tā: $q = mysql_query("SELECT posts.* FROM posts"); while ($r = mysql_fetch_assoc($q)) { ... $q2 = mysql_query("SELECT COUNT(id) FROM comments WHERE post_id = '$id'"; ... } izpildes laiks 1.5 - 2 sekundes Tas protams nav sevišķi racionāli, jo ciklā tiek atkārtots tas pats query, tāpēc nodomāju šo lietu optimizēt un salikt visu vienā vaicājumā: $q = mysql_query("SELECT posts.*, COUNT(comments.id) skaits FROM posts, comments WHERE posts.id = comments.raksta_id GROUP BY posts.id"); šis kods izpildījās <0.5 sekundēs - ātruma ieguvums liels, tikai, kā jau minēja šīs tēmas autors, netiek atlasīti tie raksti, kam nav neviena komentāra. Tāpēc mēģināju izmantot LEFT JOIN un vaicājums izskatījās apmēram tā: $q = mysql_query("SELECT posts.*, COUNT(comments.id) skaits FROM posts LEFT JOIN comments ON posts.id = comments.raksta_id GROUP BY posts.id"); šis kods strādāja kā vajadzīgs, bet izpildījās veselas 5-6 sekundes - 3 reizes ilgāk kā sākotnējā versija ar ciklu. Vai tas ir normāli, ka LEFT JOIN izpildās tik ilgi, vai arī esmu kaut kur kļūdījies? Link to comment Share on other sites More sharing options...
litt Posted December 7, 2005 Report Share Posted December 7, 2005 Vai nav prātīgi skaitu glabāt atsevišķā laukā? Izaliks lieka servera noslodze katru reizi pārskaitot ierakstus Link to comment Share on other sites More sharing options...
v3rb0 Posted December 7, 2005 Report Share Posted December 7, 2005 indexi ir? Link to comment Share on other sites More sharing options...
gigis Posted December 7, 2005 Report Share Posted December 7, 2005 pievienoju indeksu laukam raksta_id komentāru tabulā, tagad viss notiek ļoti ātri, 0.3 sekundēs. Paldies! Šķiet, jāpalasa par indeksiem kaut kas :) Link to comment Share on other sites More sharing options...
Recommended Posts