MySQL запрос: отобразить все записи из guestbook_comments для конкретного owner_id - PullRequest
1 голос
/ 08 апреля 2011

Мне нужна помощь с запросом из нескольких таблиц.

Моя база данных: У меня есть следующие таблицы:

1. users (user_id, user_name, ..) //user_name is unique.
2. guestbook_comments(owner_id, comment_author_id, comment ..)
3. profile_photo(profile_photo_id, user_id, path)

Моя проблема: Я хочу построить следующий запрос:

  1. У меня есть URL как guestbook.php?user=sudeep. Так что я получаю user_name по $_GET['user']; user_name уникальным (в таблице пользователей).
  2. Я хочу отобразить все записи из guestbook_comments для определенного owner_id (но я знаю только user_name, поэтому мне нужно будет найти user_id из users таблицы).
  3. Для каждой таблицы comment_author_id в guestbook_comments я хочу получить его user_name из таблицы users и path из таблицы profile_photo.

Мой подход: Сначала я присоединяюсь к таблице users и guestbook_comments, чтобы получить все комментарии гостевой книги для определенного user_id. Затем в while loop я присоединяюсь к users и profile_photo таблицам, чтобы получить user_name и фото path соответственно.

Я очень сомневаюсь, что мой подход эффективен. Можете ли вы сказать мне, если есть правильный способ сделать это?

 $sql = "SELECT u.user_id, g.owner_id, g.comment_author_id
FROM guestbook g
INNER JOIN users u ON u.user_id = g.owner_id
WHERE u.user_name = $user_name";

    while($row = mysql_fetch_array( $result )) {        
        $author_id = $row['comment_author_id'];
        $sql = "SELECT u.user_name, p.path
                FROM profile_photo p
                INNER JOIN users u ON u.user_id = p.user_id
                WHERE u.user_id = $author_id;

                //display comment text from guestbook, user_name from users, and photo from profile_photo
    } 

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Я что-то упустил, или вы могли бы объединить оба соединения одновременно и получить все данные за 1 вызов в базу данных, а не за 2 вызова на пользователя?

 $sql = "SELECT u.user_id, g.owner_id, g.comment_author_id, p.path
FROM guestbook g
INNER JOIN users u ON u.user_id = g.owner_id
INNER JOIN profile_photo p on u.user_id = p.user_id
WHERE u.user_name = $user_name";
1 голос
/ 08 апреля 2011

Попробуйте один запрос:

SELECT u.user_id, g.owner_id, g.comment_author_id, g.comment_text, c.user_name, p.path
FROM users u
LEFT JOIN guestbook g
    ON u.user_id = g.owner_id
LEFT JOIN users c
    ON c.user_id = g.comment_author_id
LEFT JOIN profile_photo p
    ON p.user_id = g.comment_author_id
WHERE u.user_name = $user_name

От пользователя, найдите записи в гостевой книге, найдите комментаторов, найдите фотографии комментаторов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...