получить список пользователей с некоторыми данными из другой таблицы - PullRequest
0 голосов
/ 13 июля 2011

У меня есть таблица (пользователи) и у меня есть еще одна таблица, скажем (книги)

таблица пользователей:

Id | Имя пользователя

1 :: Джон

2 :: Доу

стол книг:

id | book_title | user_id (пользователь, которому принадлежит эта книга)

1 :: book1 :: 2

2 :: book2 :: 2

3 :: book3 :: 2

4 :: book4 :: 1

5 :: book5 :: 1

Теперь, как получить список пользователей и узнать, сколько книг у каждого пользователя

вот так:

  • Джон (2 книги)

  • Доу (3 книги)


Я использую codeigniter framework ..

заранее спасибо:)

Ответы [ 4 ]

0 голосов
/ 13 июля 2011

Если вы используете платформу Active Record CI, это будет примерно так:

$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;
}
0 голосов
/ 13 июля 2011

Зацикливая вывод своих пользователей, вы захотите сделать еще один вызов БД внутри цикла с помощью чего-то вроде $this->db->count_all_results(); со строкой where для выбора идентификатора пользователя.Извините, что не объяснил слишком хорошо, но если вы понимаете логику этого, с вами все будет в порядке.

НО это мое объяснение без слишком большого знания JOIN, как видно выше.

0 голосов
/ 13 июля 2011

Чтобы ответить на ваш второй вопрос:

Мне просто нужно было сделать это для некоторых моих собственных аналитических данных:

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

Если вам приходится делать это часто, возможно, вы захотите выяснить, как это сделать, используя несколько объединений, которые более эффективны, чем подзапросы.

0 голосов
/ 13 июля 2011

Это база данных SQL? Не могли бы вы использовать SQL-запрос, чтобы получить то, что вы хотите?:

SELECT Username, COUNT(books) AS how_many_books FROM users JOIN books ON users.id=books.user_id GROUP BY Username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...