2013-03-18 86 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