2013-03-18 64 views
0

我試圖建立一個查詢,將提供評估另一個查詢

  1. 給在每一個不是由currentUserID書面(現在完成與組線程的最後一條消息布爾類型的超額收益列如果用戶啓動了一個線程但沒有收到響應,那麼該線程不應該顯示出來(現在通過簡單地使用WHERE results.sender_id過濾數據來完成)。 = currentUserID)
  2. 提供一個布爾列來判斷是否發送了響應n這個牙(未完成,但將涉及發現從查詢中最後一個元素,看是否該SENDER_ID是=當前登錄的用戶ID)

http://sqlfiddle.com/#!2/85971/2

簡介

  • 用戶1向用戶2發送消息
  • 主題ID:1
  • 主題:'Hi Subject'
  • 身體:'嗨身體

  • 用戶2個響應:

  • 線程ID:1
  • 身體: '嗨身體效應'

用戶1 SQL後應當返回

THREAD_ID |SUBJECT  | SENDER_ID | BODY    | Responded 
1   | Hi Subject | 2   | Hi Body Response | false 

由於用戶2的SQL應迴歸

THREAD_ID |SUBJECT  | SENDER_ID | BODY | Responded 
1   | Hi Subject | 1   | Hi Body | true 

請參閱小提琴

我吧射門被其取1和2,但不是3英畝以下,我想招惹工會實現各地這但沒有得到。

SELECT * FROM (
    SELECT t.id as thread_id, t.subject, m.sender_id, m.body 
    FROM messages m 
    JOIN threads t ON (m.thread_id = t.id) 
    ORDER BY t.id asc, m.cdate desc 
) as results 
WHERE results.sender_id != currentUserID 
GROUP BY results.thread_id; 

回答

1

檢查下面的查詢。我還添加了消息ID列。

第一個結果......

SELECT t.id as thread_id, t.subject, m.sender_id, m.body, m.id, 
(SELECT CASE s.status WHEN 1 THEN 'true' ELSE 'false' END 
FROM STATUS s where s.message_id = m.id and s.user_id = 1) Responded 
FROM messages m 
JOIN threads t ON (m.thread_id = t.id) 
WHERE m.sender_id != 1 

第二個......

SELECT t.id as thread_id, t.subject, m.sender_id, m.body, m.id, 
(SELECT CASE s.status WHEN 1 THEN 'true' ELSE 'false' END 
FROM STATUS s where s.message_id = m.id and s.user_id = 2) Responded 
FROM messages m 
JOIN threads t ON (m.thread_id = t.id) 
WHERE m.sender_id != 2 

謝謝!

@leo。

+0

這是偉大的謝謝你! – user391986 2013-03-18 13:04:48