我有桌子(用户) 我还有另一张桌子(书)
用户表:
1 :: john
2 :: doe
书表:1 :: book1 :: 2
2 :: book2 :: 2
3 :: book3 :: 2
4 :: book4 :: 1
5 :: book5 :: 1
现在,我如何获得用户列表并获得每个用户拥有的书籍数量
像这样:约翰(2本书)
doe(3本书)
我使用codeigniter框架..
提前感谢:)
答案 0 :(得分:0)
这是SQL数据库吗?难道你不能使用SQL查询来获得你想要的东西吗?:
SELECT Username, COUNT(books) AS how_many_books FROM users JOIN books ON users.id=books.user_id GROUP BY Username
答案 1 :(得分:0)
在循环输出用户时,您需要在循环内再次调用数据库,使用$this->db->count_all_results();
和where
行来选择用户ID。很抱歉没有解释得太好,但如果你理解它的逻辑,你会没事的。
但这是我的解释,而不太了解JOIN
,如上所示。
答案 2 :(得分:0)
回答你的第二个问题:
我必须为我自己的一些分析做到这一点:
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
如果必须经常这样做,您可能想要弄清楚如何使用比子查询更有效的多个连接来执行此操作。
答案 3 :(得分:0)
如果您正在使用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;
}