【问题标题】:Multiple select query with single where clause?带有单个where子句的多选查询?
【发布时间】:2017-06-19 17:20:25
【问题描述】:

我正在创建一个消息传递系统。其中有两种类型的用户admin和user。
管理员可以向所有用户发送消息,用户可以向管理员发送消息。
我正在尝试获取,

$this->db->select("user_from,count(user_from)as total");
$this->db->from("messages");
$this->db->group_by("user_from");
$query = $this->db->get();
return $query->result_array();

$this->db->select("*");
$this->db->from("messages");
$this->db->where("user_to","admin");
$query = $this->db->get();
return $query->result_array();

单两个查询都能正常工作。
我想将两个查询合二为一。
我想使用单个 where 子句运行多个选择查询,该子句显示用户发送给管理员的最后一条消息。
谁能给我任何想法?

table screenshot model code

【问题讨论】:

  • 对两个表中的公共列使用连接
  • 怎么样?可以举个例子吗
  • 像这样:- SELECT * from messages JOIN(SELECT user_from,COUNT(user_from)as total GROUP BY user_from) WHERE user_to="admin";
  • 你在使用任何框架吗?如果有,是哪一个?
  • 在 codeigniter 中是的

标签: php mysql codeigniter


【解决方案1】:

您可以使用以下查询

$this->db->select("messages.*,count(messages.user_from) as total");
$this->db->from("messages");
$this->db->group_by("messages.user_from");
$this->db->order_by("messages.user_from","DESC");
$this->db->where("messages.user_to","admin");
$query = $this->db->get();
return $query->result_array();

【讨论】:

  • 错误号:1055 SELECT 列表的表达式#1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“dashboardcode.messages.id”;这与 sql_mode=only_full_group_by SELECT *, count(messages.user_from) 不兼容 FROM messages WHERE messages.user_to = 'admin' GROUP BY messages.user_from Filename: C:/wamp64/ www/dashboard/system/database/DB_driver.php 行号:691
  • 能否请您显示您的功能以获取更多详细信息
  • 控制器的这个查询函数
  • function get() { $data['messages'] = $this->message_model->GetUserInbox($this->session->userdata('auser')); var_dump($data); }
  • 这是我的控制器功能
【解决方案2】:
$this->db->select("*,user_from,count(user_from)as total");
$this->db->from("messages");    
$this->db->group_by("user_from");
$this->db->where("user_to","admin");
$query = $this->db->get();
return $query->result_array();

【讨论】:

    【解决方案3】:

    你的控制器

    $this->db->where("user_to","admin");
    $this->db->group_by("user_from");
    $query = $this->db->get('messages');
    $data['result'] = $query->result_array(); // Your Result Array
    $data['total'] = $query->num_rows(); // total number of records
    
    // You can pass $data in any view file here
    

    你的观点

    print_r($result); // result array
    echo $total; // total number of records
    

    【讨论】:

    • 这给出错误错误号:1055 SELECT 列表的表达式#1 不在 GROUP BY 子句中,并且包含非聚合列“dashboardcode.messages.id”,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容 SELECT * FROM messages WHERE user_to = 'admin' GROUP BY user_from 文件名:C:/wamp64/www/dashboard/system/database/DB_driver.php 行号:691跨度>
    • 你有名为“'user_from”的字段?分享你的数据库表截图。
    • 查看屏幕截图链接
    • 我想要像 facebook 这样的功能,就像所有用户都被分组并在消息中获取最后一条消息,并且当打开任何消息而不是显示完整对话时
    • $query = $this->db->get(); 行之后你把echo $this->db->last_query(); 这样你得到查询并在phpmyadmin 中执行这个查询然后告诉我你得到了什么错误
    【解决方案4】:

    要获取最后一条消息,请使用子查询:

    select message from messages where id = (select max(id) from messages where user_to = 'admin')
    

    在MySql中测试查询,如果得到想要的结果,可以去codeigniter。

    在 Codeigniter 中:

     $this->db->select('message')->from('messages');
     $this->db->where('id = (SELECT max(id) FROM messages where user_to = 'admin')', NULL, FALSE);
    

    请更正上述查询中单引号的使用,仅作为演示。

    【讨论】:

    • 如果我想要一个特定的用户最后的消息而不是我得到的方式
    • 然后在子查询中使用 where 子句
    • 怎么样?举个例子
    • $this->db->where('id = (SELECT max(id) FROM messages where user_to = 'admin' AND user_from='ram' )', NULL, FALSE);跨度>
    【解决方案5】:
    $this->db->select("*,user_from,count(user_from)as total");
    $this->db->from("messages");    
    $this->db->group_by("user_from");
    $this->db->where("user_to","admin");
    $query = $this->db->get();
    return $query->result_array();
    

    【讨论】:

      【解决方案6】:

      我的问题已经解决了。

      模态

      function AdminMessages($user)
              {
                  $sql = "select * from messages where id in (select max(id) from messages GROUP BY user_from ) AND user_to='".$user."' order by id desc";
                  $query = $this->db->query($sql);
                  //echo $this->db->last_query();
                  return $query->result_array();
              }
      
              function UserMessages($user)
              {
                  $sql = "select * from messages where id in (select max(id) from messages GROUP BY user_to ) AND user_to='".$user."' order by id desc";
                  $query = $this->db->query($sql);
                  //echo $this->db->last_query();
                  return $query->result_array();
              }
      

      【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2012-01-28
      相关资源
      最近更新 更多