从另一个表中获取包含一些数据的列表用户

Posted

技术标签:

【中文标题】从另一个表中获取包含一些数据的列表用户【英文标题】: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 框架..

提前感谢:)

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于从另一个表中获取包含一些数据的列表用户的主要内容,如果未能解决你的问题,请参考以下文章

在 ms Access 数据宏中从另一个表中获取数据

从另一个表中获取用户的最大日期

如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)

从另一个页面获取ID值[重复]

如何使用单个查询联合从另一个表中检索到的表列表?

Mysql 从一个表中选择全部,从另一个表中选择一些使用别名