2012-03-06 39 views
2

結合兩列,這是我的數據庫一個ID

database schema http://slashdir.com/php/blogg/images/bloggdb.png

我想要做什麼,是,對於一個給定的用戶ID,顯示他已報道的總次數。 我已經讀過關於此事的其他各種問題,但我仍然難住。

我嘗試了最新的查詢是

select 
    sum(posts.timesreported + comments.timesreported) AS total_reports 
FROM 
    posts 
    INNER JOIN comments ON (posts.userid = comments.userid) 
WHERE posts.userid=5 AND comments.userid=5; 

但我得到的數字是太高

感謝這一定是錯的!取而代之的

sum(posts.timesreported + comments.timesreported) AS total_reports 

+0

你用什麼程序來打印你的數據庫架構? – AshBrad 2012-03-06 16:00:26

+1

這是MYSQL Workbench,對於我們這些拒絕使用phpMyAdmin的人非常有幫助 – Snowflow 2012-03-06 20:33:30

回答

2
SELECT 
CASE WHEN NULL 
     THEN 0 
     ELSE (select sum(posts.timesreported) AS total_posts_reports 
      FROM posts INNER JOIN users ON (posts.userid = users.id) 
      WHERE posts.userid=5) 
     END 
+ 
CASE WHEN NULL 
     THEN 0 
     ELSE (select sum(comments.timesreported) AS total_comments_reports 
      FROM comments INNER JOIN users ON (comments.userid = users.id) 
      WHERE comments.userid=5) 
     END 
FROM DUAL; 
+0

我得到與我查詢過的查詢完全相同的數字。 – Snowflow 2012-03-06 20:23:26

+0

帖子和用戶如何關聯?是由USERID嗎? – Teja 2012-03-06 20:25:10

+0

檢查這一個...我認爲這將工作... – Teja 2012-03-06 20:29:50

1

嘗試

sum(posts.timesreported) + sum(comments.timesreported) AS total_reports 

,我想你的用戶id需要組

1

它看起來像你的收集和之前挑出用戶。也許這是在加入之前爲所有用戶添加這些列值?如果您選擇*,執行您的INNER JOIN,其中userid = 5會發生什麼。將列值保存爲兩個變量,然後嘗試添加它們。你有同樣的結果嗎?

這可能會幫助您錯誤檢查以查看上述理論是否準確。

  <?php 
      // Connects to your Database 
      mysql_connect("your.hostaddress.com", "username", "password") or die(mysql_error()); 
      mysql_select_db("Database_Name") or die(mysql_error()); 

      //Run Query 
      $NUM1=mysql_query("SELECT Field1 FROM Table WHERE user.key=5"); 
      $NUM2=mysql_query("SELECT Field2 FROM Table WHERE user.key=5"); 

      //Print Each Result 
      echo 'Num1 = '.$NUM1; 
      echo 'Num2 = '.$NUM2; 

      //Print Total 
      $TOTAL = $NUM1 + $NUM2; 
      echo 'Total = '.$TOTAL; 
      ?> 
+0

看起來像你正在做的事情,因爲所有查詢發佈在這裏,直到這一點給出完全相同(錯誤)的數字。我不是很好qith sql,你能爲此提供一個聲明嗎? – Snowflow 2012-03-06 20:17:23

+0

我將發佈我的回覆作爲對此答案的編輯。謝謝 – AshBrad 2012-03-06 20:28:48

1

WHERE posts.userid=5 AND comments.userid=5;是不必要的,因爲表已加入。

而且sum運營商是不正確的邏輯

使用此查詢

select 
    sum(posts.timesreported) + sum(comments.timesreported) AS total_reports 
FROM 
    posts 
    INNER JOIN comments ON (posts.userid = comments.userid) 
WHERE posts.userid=5