从另一个表中获取包含一些数据的列表用户
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;
【讨论】:
以上是关于从另一个表中获取包含一些数据的列表用户的主要内容,如果未能解决你的问题,请参考以下文章