php - 如何根据 session 查询显示用户消息收件箱?

标签 php jquery mysql yii

我试图在 Yii 应用程序上显示用户收件箱,但我无法编写正确的条件。

对话是基于 (user_id, recipient_id) ... 所以没有对话表,我的问题是如何在没有对话表的情况下对列表对话进行排序?!

如果我使用 yii 关系呢?!

表结构:

id (int)
message (text)
user_id (int)
recipient_id (int)
sent_at (int)

我的标准是:

    $criteria = new CDbCriteria();
    $criteria->condition = "recipient_id=:user_id OR user_id=:user_id";
    // $criteria->group ='user_id';
    // $criteria->select ='*';
    // $criteria->distinct = true;
    $criteria->order = "sent_at ASC";
    $criteria->limit = 5;
    $criteria->params = array(':user_id' => Yii::app()->user->id);
    $model = UserMessage::model()->findAll($criteria);

输出

显示所有消息收件人

最佳答案

您必须按消息本身进行分组。但是,如果这是一个大文本/字符串字段,这将不是对数据库的有效查询,而且会非常慢。我会敦促您重新审视您的数据库结构。

我已经实现了一些非常相似的东西,但是我已经转换了我的表以显示消息之间的关系。

id (int)
message (text)
user_id (int)
recipient_id (int)
sent_at (int)
reply_to (int) default 0      ;;; I added this field

使用它我可以搜索顶级对话

SELECT * from user_message where reply_to is NULL or reply_to = 0;

使用此方案,对于消息,reply_to 字段将为 0。

在 Yii 中

$criteria = new CDbCriteria();
$criteria->condition = "reply_to is NULL or reply_to = 0";
$criteria->order = "sent_at ASC";
$criteria->limit = 5;
$model = UserMessage::model()->findAll($criteria);

查看消息和创建回复时,将reply_to code设置为上层的值。这允许无限数量的嵌套。

MSG : I need help with this question (id = 1, reply_to = 0)
MSG : L Re: I need help with this question (id = 2, reply_to = 1)
MSG : L Re: I need help with this question (id = 3, reply_to = 1)
MSG :   L Re: I need help with this question (id = 4, reply_to = 3)
MSG :   L Re: I need help with this question (id = 5, reply_to = 3)
MSG :      L Re: I need help with this question (id = 8, reply_to = 5)
MSG : L Re: I need help with this question (id = 6, reply_to = 1)
MSG :   L Re: I need help with this question (id = 7, reply_to = 6)

关于php - 如何根据 session 查询显示用户消息收件箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290518/

相关文章:

java - 为表格的每一行选择一个复选框

mysql - 将两个 SQL 数据库与多个表组合起来;在此过程中删除重复项

php - 正则表达式捕获第一个可选字符串之前的所有内容

php - Symfony 响应对象如何设置 http header ?

javascript - 如何停止来自 iframe 内容的 javascript 函数?

php - 使用php在数据库中插入日期格式

mysql - Innodb 崩溃,mysql 直到服务器重新启动后才启动

php - 在 angular2 组件中设置静态文字值

php - 安全PHP登录SQL注入(inject)

jquery - 如何在jquery中的每个li的三个之后插入一个新的li