【问题标题】:get list users with some data from another table从另一个表中获取包含一些数据的列表用户
【发布时间】:2011-10-04 02:45:05
【问题描述】:

我有表(用户) 我还有另一张桌子,比如说(书)

用户表:

标识 |用户名

1 :: 约翰

2 :: doe

书桌:

标识 |书名 | user_id(拥有这本书的用户)

1 :: book1 :: 2

2 :: book2 :: 2

3 :: book3 :: 2

4 :: book4 :: 1

5 :: book5 :: 1

现在,我如何获取用户列表以及每个用户拥有多少本书

像这样:

  • 约翰(2 本书)

  • doe(3 本书)


我使用 codeigniter 框架..

提前感谢:)

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    回答你的第二个问题:

    我只需要为自己的一些分析执行此操作:

    SELECT users.* , 
    
       (SELECT COUNT( 1 ) 
        FROM books
        WHERE user_id = users.id) 
        AS  "Number of Books",
    
       (SELECT COUNT( 1 )
        FROM files
        WHERE user_id = users.id)
        AS  "Number of Files"
    
    FROM users
    

    如果您必须经常执行此操作,您可能想弄清楚如何使用比子查询更有效的多个连接来执行此操作。

    【讨论】:

    • 非常感谢,我尝试了数百次,但我自己没有找到它,再次感谢你,现在完美无缺:)
    【解决方案2】:

    这是 SQL 数据库吗?难道你不能使用 SQL 查询来得到你想要的吗?:

    SELECT Username, COUNT(books) AS how_many_books FROM users JOIN books ON users.id=books.user_id GROUP BY Username
    

    【讨论】:

    • 非常感谢 Jacek,它的工作! ..如果可能的话,我还有另一个问题,我怎样才能得到多少文件(从文件表),所以我可以得到这样的列表:jonhn(4本书和9个文件)以同样的方式关于书籍表?再次感谢杰克
    【解决方案3】:

    在遍历用户的输出时,您需要在循环内再次调用数据库,使用类似$this->db->count_all_results();where 行来选择用户ID。很抱歉解释的不好,但如果你理解它的逻辑,你会没事的。

    但这是我对JOIN 了解不多的解释,如上所示。

    【讨论】:

      【解决方案4】:

      如果你使用 CI 的 Active Record 框架,它会是这样的:

      $this->db->select('Users.Username, COUNT(Book.Id) AS user_book_count');
      $this->db->from('Users');
      $this->db->join('Books', 'Users.Id = Books.user_id', 'left');
      $this->db->group_by('Users.Id');
      
      $query = $this->db->get();
      
      if ($query->num_rows() > 0)
      {
          foreach ($query->result() as $row) {
              $users[] = $row->username . '(' . $row->user_book_count . ')';
          }
          return $users;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-10
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 2017-01-14
        相关资源
        最近更新 更多