nemakuphp Posted August 1, 2011 Report Share Posted August 1, 2011 Ir trīs tabulas, piemērā likšu kā rakstu sistēmu, vieglāk uzrakstīt piemēru. raksti raksta_id | cat_id | raksta_title categories cat_id | cat_title comments k_id | type Vajag izvilkt rakstus, kuriem klāt ir arī kategorijas informācija un komentāru skaits. Man problēmas sagādā komentāru skaita dabūšana. Tikai raksta datus + kategorijas datus dabūju ar LEFT JOIN SELECT * FROM `raksti` LEFT JOIN `categories` ON (raksti.cat_id = categories.cat_id) ORDER BY raksta_id DESC Kā būtu jāveido kverijs, lai iegūtu arī raksta komentāru skaitu? Link to comment Share on other sites More sharing options...
daGrevis Posted August 1, 2011 Report Share Posted August 1, 2011 Kāpēc posts ir aizvērts? Link to comment Share on other sites More sharing options...
nemakuphp Posted August 1, 2011 Author Report Share Posted August 1, 2011 Jo šo problēmu izdevās atrisināt Link to comment Share on other sites More sharing options...
daGrevis Posted August 1, 2011 Report Share Posted August 1, 2011 Tad dzēss ārā. Tapat liela jēga nav, jo nav dots risinājums. Link to comment Share on other sites More sharing options...
NBS Posted August 2, 2011 Report Share Posted August 2, 2011 Viss forši strādā: raksti raksta_id(int) | cat_id(int) | raksta_title(nvarchar) categories cat_id(int) | cat_title(int) comments raksta_id(int) | comments(nvarchar) SELECT r.raksta_id, r.cat_id, r.raksta_title, c.cat_title, COUNT(r.raksta_id) AS komentaru_skaits FROM raksti AS r LEFT JOIN categories AS c ON r.cat_id = c.cat_id LEFT JOIN comments AS cc ON cc.raksta_id = r.raksta_id GROUP BY r.raksta_id, r.cat_id, r.raksta_title, c.cat_title Link to comment Share on other sites More sharing options...
nemakuphp Posted August 2, 2011 Author Report Share Posted August 2, 2011 NBS, kā jau teicu, šo izdevās atrisināt, taču tagad atkal problēma, nepieciešams papildus uzstādījums. raksti raksta_id | cat_id | raksta_title | raksta_time categories cat_id | cat_title | cat_time comments k_id | type Nepieciešams viss tas pats, kas pirmajā postā, taču jāizvelk tikai tādi ieraksti, kur raksta_time >= cat_time (kā jau teicu, šī struktūra ir tikai kā piemērs, un reālajā situācijā var būt ieraksti, kur raksta_time < cat_time). Laiks tiek glabāts kā Unix timestamp Link to comment Share on other sites More sharing options...
NBS Posted August 2, 2011 Report Share Posted August 2, 2011 Hmm, nu jā, to es nezināju. Link to comment Share on other sites More sharing options...
nemakuphp Posted August 2, 2011 Author Report Share Posted August 2, 2011 Izdevās atrisināt. Gala kverijs izskatās +/- šādi SELECT `raksti`.*, `categories`.*, COUNT(`comments`.`comment_time`) AS `komentari` FROM `raksti` JOIN `categories` ON (`categories`.`cat_id` = `raksti`.`cat_id` AND `categories`.`cat_time` <= `raksti`.`raksta_time`) LEFT OUTER JOIN `comments` ON (`comments`.`k_id` = `raksti`.`raksta_id` AND `comments`.`type` = 'raksti') GROUP BY `raksti`.`raksta_id`, `comments`.`k_id` ORDER BY `raksta_time` DESC Link to comment Share on other sites More sharing options...
Recommended Posts