Jump to content
php.lv forumi

Atkal problēmas ar SQL kveriju


nemakuphp

Recommended Posts

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

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

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

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...