Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何基于对话查询显示用户邮件收件箱?_Php_Jquery_Mysql_Yii - Fatal编程技术网

Php 如何基于对话查询显示用户邮件收件箱?

Php 如何基于对话查询显示用户邮件收件箱?,php,jquery,mysql,yii,Php,Jquery,Mysql,Yii,我试图在Yii应用程序上显示用户收件箱,但我无法编写正确的标准 对话基于(用户id、收件人id)。。。所以没有对话表,我的问题是如何排序没有对话表的对话列表 如果我使用yii关系呢 表格结构: id (int) message (text) user_id (int) recipient_id (int) sent_at (int) $criteria = new CDbCriteria(); $criteria->condition = "recipient_id=:u

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

对话基于(用户id、收件人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)
    $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);
输出


将显示所有邮件收件人

如果您没有在数据库表中添加更多信息,则无法将邮件划分为对话

SELECT * from user_message where reply_to is NULL or reply_to = 0;
除非,否则您的对话是唯一的


在这种情况下,您可以
按用户id、收件人id进行分组

如果您没有在数据库表中添加更多信息,则无法将邮件划分为对话

SELECT * from user_message where reply_to is NULL or reply_to = 0;
除非,否则您的对话是唯一的


在这种情况下,您可以按用户id、收件人id进行分组,您必须按邮件本身进行分组。但是,如果这是一个大的文本/字符串字段,那么这将不是一个有效的数据库查询,而且速度会非常慢。我将敦促您重新审视您的数据库结构

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

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;
使用此方案,对于新的消息,回复字段将为0

易建联

$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)

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

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

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;
使用此方案,对于新的消息,回复字段将为0

易建联

$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)


您的条件需要两个参数,但您只提供了一个。有问题吗?@Tim3880没有,因为这是用户收件箱页面(消息列表),我只有用户id。您的条件需要两个参数,但您只提供了一个。这可能是问题所在吗?@Tim3880不,因为这是用户收件箱页面(消息列表),我只有用户id。虽然习惯了分组方式,但功能更强。我做到了,现在显示了大约10个对话中的2个对话。。那我怎么能只做一次对话?!您想显示什么:对话列表还是来自对话的消息列表?对话列表这就是答案。你应该会得到正确的结果是的,虽然习惯了按
分组,但功能更强。好的,我做到了,现在显示了大约10个对话中的2个对话。。那我怎么能只做一次对话?!您想显示什么:对话列表还是来自对话的消息列表?对话列表这就是答案。你应该得到正确的结果很好,我喜欢你的表,但我想要一个对话列表,而不是消息,你的查询在对话中显示所有消息实际上,使用你的表结构,没有办法显示对话,也没有链接消息的机制。如果使用更新的查询,所有新线程都将有一个空的代码回复,因此查询将只列出线程上的第一条消息。线程中的所有其他消息都将有一个非空的回复,并且不会显示。好的,我正在尝试,所以您认为replay可以完成此任务。。或者你怎么想?。。如果我使用conv_id或者只使用php条件会怎么样?我认为使用reply_to字段会更容易使用。您只需要跟踪父级(而不是会话),它允许您使用嵌套级别的会话。我清理并更新了我的答案。很好,我喜欢你的表,但我想要一个对话列表,而不是消息,你的查询在对话中显示所有消息实际上,使用你的表结构无法显示对话,也没有链接消息的机制。如果使用更新的查询,所有新线程都将有一个空的代码回复,因此查询将只列出线程上的第一条消息。线程中的所有其他消息都将有一个非空的回复,并且不会显示。好的,我正在尝试,所以您认为replay可以完成此任务。。或者你怎么想?。。如果我使用conv_id或者只使用php条件会怎么样?我认为使用reply_to字段会更容易使用。您只需要跟踪父级(而不是会话),它允许您使用嵌套级别的会话。我整理并更新了我的答案。