我正在开发一个信息系统,我和消息中心。我想显示Outlook或Gmail“对话”等消息。
在我的留言表中,我有以下列:
首先,我收到没有replyId
的消息,以显示“最新”消息。
但是当我点击任何消息时,我都没有得到对话...... :(
任何人都可以帮我查询?
提前致谢
编辑: 我在表格中添加了一个额外的字段,即最后一次回复会话的ID,这样我就可以同时收到所有对话消息了!
:)
答案 0 :(得分:1)
您想使用CTE
来完成此操作,这实际上是一个父子查询:
declare @MessageId int = 3;
with Conversations as
(
select
MessageId,
[Date],
[From],
[To],
Body,
[Subject],
[State],
ReplyId,
CAST(MessageId as varchar(max)) + '-' as hierarchy,
CAST(MessageId as varchar(max)) + '-' as TopMessageId
from
Messages
where
replyid is null
union all
select
m.MessageId,
m.[Date],
m.[From],
m.[To],
m.Body,
m.[Subject],
m.[State],
m.ReplyId,
c.hierarchy + CAST(m.MessageId as varchar(max)) + '-' as hierarchy,
c.TopMessageId
from
Conversations c
inner join Messages m on
c.MessageId = m.ReplyId
)
select
c2.MessageId,
c2.[Date],
c2.[From],
c2.[To],
c2.Body,
c2.[Subject],
c2.[State],
c2.ReplyId
from
Conversations c1
inner join Conversations c2 on
c2.hierarchy like c1.TopMessageId + '%'
where
c1.MessageId = @MessageId
order by c2.[Date] desc
如果您使用的是SQL Server 2008,则可能需要在表格中使用hierarchyid
列来避免CTE一起使用。
答案 1 :(得分:0)
我认为您正在寻找的是使用sql server进行递归,因为您希望将对话作为子父关系。
答案 2 :(得分:0)
我写了这个,这是一个简单的聊天转换:
session_start();
$regreg = $_SESSION['username'];
$fgetrhge = $_GET['with'];
$pdo = new PDO('mysql:host=localhost;dbname=TESTDB', 'TESTUSER', 'TESTPASS');
$sql = "SELECT an, von, message, time FROM messages ORDER BY time ASC";
foreach ($pdo->query($sql) as $row) {
if($_SESSION['username'] == $row['von'] && $_GET['with'] == $row['an']) {
echo '<div align="right">
<div class="own">
<span style="margin-right:18px;" class="nmespn">DU</span>
<img src="http://YOURDOMAIN.NET/profileicons/'.$regreg.'" class="pbmspna" onerror="this.onerror=null;this.src='."'http://crashhd.de/no_pic.png'".';">
<div style="float:left;padding-top:2px;" align="left">
<span class="tmespn">'.$row['time'].'</span>
</div>
<br><br>
<div align="left" style="margin-left:14px" class="msgspn">
<span>'.$row['message'].'</span>
</div>
</div>
</div>
<br>';
}
else if($_GET['with'] == $row['von'] && $_SESSION['username'] == $row['an']) {
echo '<div align="left">
<div align="left" class="partner">
<img src="http://YOURDOMAIN.NET/profileicons/'.$row['von'].'" class="pbmspna" onerror="this.onerror=null;this.src='."'http://crashhd.de/no_pic.png'".';">
<span class="nmespn" style="cursor:pointer;">'.$row['von'].'</span>
<div style="float:right;padding-right:6px;" align="right">
<span class="tmespn">'.$row['time'].'</span>
</div>
<br><br>
<div class="msgspn">
<span>'.$row['message'].'</span>
</div>
</div>
</div>
<br>';
}
}
// an = to; von = from; sry im german :D
我希望我能提供帮助:)。