簡體   English   中英

將表格行拆分為兩個字段並分別計數

[英]Split table row into two fields and count each

到目前為止,我已經編寫了以下查詢:

SELECT forum_topics.*, users.id as userid, users.username, users.avatar, forum_categories.name as cat_name
FROM forum_topics 
INNER JOIN users
ON users.id = forum_topics.author_id
INNER JOIN forum_categories
ON forum_categories.id = forum_topics.category_id
WHERE forum_topics.id = 64

但我也想添加另一個具有以下結構的表votes

___________________________________________________________
| id | object_type | object_id | receiver | giver | type    |
___________________________________________________________
| 128| topic       |     64    |    21    |  22   | like    |
| 129| topic_reply |     55    |    21    |  22   | dislike |
___________________________________________________________

基本上,這兩個表之間的關系是表1中的forum_topics.id和表2中的object_id (最下面的一個)。 這是一個論壇,我想顯示每個主題的喜歡/不喜歡並回復。 type可能是likedislike receiver是發帖的用戶, giver是投票的用戶。 我想在第一個查詢中INNER JOIN votes表,並將所有喜歡和不喜歡數計入兩個單獨的字段中。 就像是:

Select votes.count(*) as likes WHERE type = 'like and votes.count(*) as dislikes WHERE type = 'dislike'的查詢變得非常復雜,我很困惑。

編輯:所以我想通了forum_topics 這是我的做法:

    SELECT forum_topics.*, users.id as userid, users.username, users.avatar, forum_categories.name as cat_name,
   count(CASE WHEN votes.type = 'like'    AND votes.object_type = 'topic'  then 1 else null end) as votes_likes, 
   count(CASE WHEN votes.type = 'dislike' AND votes.object_type = 'topic'  then 1 else null end) as votes_dislikes
FROM forum_topics 
INNER JOIN users
ON users.id = forum_topics.author_id
INNER JOIN forum_categories
ON forum_categories.id = forum_topics.category_id
INNER JOIN votes 
ON votes.object_id = forum_topics.id
WHERE forum_topics.id = ?

現在forum_posts它不起作用..

SELECT forum_posts.*, users.id as userid, users.username, users.avatar,
      count(CASE WHEN votes.type = 'like'    AND votes.object_type = 'topic_post' then 1 else null end) as votes_likes, 
      count(CASE WHEN votes.type = 'dislike' AND votes.object_type = 'topic_post' then 1 else null end) as votes_dislikes
  FROM forum_posts
  INNER JOIN users
  ON users.id = forum_posts.author_id
  LEFT JOIN votes 
  ON votes.object_id = forum_posts.id
  WHERE forum_posts.topic_id = 64
  ORDER BY forum_posts.id

任何想法如何解決? 在HeidiSQL中,它返回一行,且所有內容均為NULL。

您需要GROUP BY

SELECT forum_posts.id
       , forum_posts.author_id
       , forum_posts.editor_id
       , forum_posts.topic_id
       , forum_posts.content
       , forum_posts.date_created
       , forum_posts.updated
       , users.id as userid
       , users.username
       , users.avatar
       , count(CASE WHEN votes.type = 'like' AND votes.object_type = 'topic_post' THEN 1 ELSE NULL END) AS votes_likes
       , count(CASE WHEN votes.type = 'dislike' AND votes.object_type = 'topic_post' THEN 1 ELSE NULL END) AS votes_dislikes
FROM forum_posts
INNER JOIN users ON users.id = forum_posts.author_id
LEFT JOIN votes ON votes.object_id = forum_posts.id
WHERE forum_posts.topic_id = 64
GROUP BY forum_posts.id
       , forum_posts.author_id
       , forum_posts.editor_id
       , forum_posts.topic_id
       , forum_posts.content
       , forum_posts.date_created
       , forum_posts.updated 
       , users.id
       , users.username
       , users.avatar

嘗試使用分組依據;

SELECT type, COUNT(*) 
FROM votes 
GROUP BY type;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM