【问题标题】:How to run mysql query backward?如何向后运行mysql查询?
【发布时间】:2016-11-10 02:47:05
【问题描述】:

问题的标题可能听起来很奇怪,但我的英文无法找到更好的标题。

A 在我的网站上创建了聊天应用程序。现在我想添加通知。

提交新消息时,我正在检查其他用户是否已阅读给定对话中的先前消息。如果他有然后我写一个新的通知。如果他以前没有看过,那么我不会写新的通知。

我使用 mysql count() 函数对字段进行计数,然后执行 php 逻辑。在 CI 中它看起来像这样:

public function ifUnreadMsgs($con_id, $sender_id)
{
    $this->db->where('conversation_id', $con_id);
    $this->db->where('sender_id', $sender_id);
    $this->db->where('seen IS NULL', null, false);
    $this->db->from('messages');
    $count = $this->db->count_all_results();

    if($count > 0){
        return true;
    }else{
        return false;
    }
}

我的问题是关于优化的。我知道随着时间的推移我会收到很多信息。假设我在数据库中存储了 1 000 000 条消息。我也知道看到可能“NULL”的那个将是 msg_id 大约。 999 995。我必须经常使用这个查询,用户等待ajax响应,所以我想尽可能减少查询时间。

是否可以向后运行查询并在我达到我正在寻找的值时停止?我考虑过使用 DISTICT 或 LIMIT 关键字来停止但如何向后运行?

编辑:

实际上我需要从最后一行开始循环遍历消息表,在“conversation_id”处停止并查看“seen”是否为 NULL。

【问题讨论】:

  • 您是否只是在 SQL 中寻找 ORDER BY 关键字?您可以更改结果的排序顺序,然后限制结果,从而有效地为您的查询提供“最后匹配的记录”。
  • LIMIT 是您想要使用的,您也可以通过仅选择某些列来减少压力。然后只需return ($count > 0);
  • 我认为我的问题源于对 mysql 如何执行查询缺乏了解。 ORDER BY 是从最后一行开始遍历表,还是从第一行到最后一行,然后对结果进行排序?我正在寻找第一个 - 从最后一个开始,向上移动并在加工条件下停止。我不想遍历前 999 990 行,因为我已经知道我不需要它们
  • 我问过类似的问题。用last seen比较怎么样? stackoverflow.com/questions/37739887/…

标签: php mysql codeigniter


【解决方案1】:

您可以将 ORDER BY 用于升序和降序。默认情况下 ORDER BY 从第一个开始,但您可以通过添加 DESC 来启动它。请查看this & that

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 2012-01-25
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多