2017-01-12 38 views
0

我有兩個表:如何COUNT條件而不同的連接MySQL?

mysql> DESCRIBE swaps; 
+-------------+----------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+----------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| user1_id | int(11) | NO |  | NULL |    | 
| user2_id | int(11) | NO |  | NULL |    | 
| hasto  | int(11) | NO |  | NULL |    | 
| requested | datetime | NO |  | NULL |    | 
| accepted | datetime | YES |  | NULL |    | 
| swapped1 | datetime | YES |  | NULL |    | 
| swapped2 | datetime | YES |  | NULL |    | 
| rejected | datetime | YES |  | NULL |    | 
| rejected_by | int(11) | YES |  | NULL |    | 
+-------------+----------+------+-----+---------+----------------+ 
mysql> DESCRIBE messages; 
+-----------+----------+------+-----+-------------------+----------------+ 
| Field  | Type  | Null | Key | Default   | Extra   | 
+-----------+----------+------+-----+-------------------+----------------+ 
| msg_id | int(11) | NO | PRI | NULL    | auto_increment | 
| sender_id | int(11) | NO |  | NULL    |    | 
| msg  | text  | NO |  | NULL    |    | 
| msg_time | datetime | NO |  | CURRENT_TIMESTAMP |    | 
| swap_id | int(11) | NO |  | NULL    |    | 
| seen  | datetime | YES |  | NULL    |    | 
+-----------+----------+------+-----+-------------------+----------------+ 

和查詢,我從this問題

SELECT s.*, m.* 
FROM swaps as s 
JOIN messages as m 
ON (s.id= m.swap_id AND m.msg_time= 
    (SELECT MAX(msg_time) FROM messages WHERE messages.swap_id = s.id)); 

調整,結果我單排,每交換和這個交換中最後發送消息的信息。我想添加沒有看到的消息的計數(m.seen IS NULL)。

我嘗試了不同的方法,但總是得到錯誤。我想要的是在相應的交換中添加消息數量,並將IS NULL視爲結果集。將不勝感激任何建議。

回答

0

您可以添加算作一個子查詢:

SELECT s.*, m.*, 
     (SELECT COUNT(*) FROM messages m2 WHERE m2.seen IS NULL) as seen_is_null 
FROM swaps s JOIN 
    messages m 
    ON s.id= m.swap_id AND 
     m.msg_time =(SELECT MAX(m2.msg_time) FROM messages m2 WHERE m2.swap_id = s.id)); 

好像好奇地來計數超過所有的消息,但是這是個問題問什麼。當然,你可以引入一個相關條款來計算給定的交換或其他東西。

+0

是的,這是一個很好的開始,但我得到所有看不見的消息每個交換。我需要添加條件在哪裏swap_id = ...但我沒有swap_id。它應該加入。 –

+0

哦,我錯過了你的代碼下的評論。似乎我沒有問這個問題 - 我需要給定交換的相關條款 –