У меня есть эта диаграмма, которая должна объяснить мою ситуацию. Мне нужна помощь в объединении трех таблиц, которые я понятия не имею, как это сделать:
Поэтому я могу пройти через цикл получения записей, выполнив следующие действия:
<img src="<?php echo $row['filename']; ?>" alt="" /> Album: <?php echo $row['album_name']; ?> AlbumID: <?php echo $row['album_id']; ?>
Использование INNER JOIN не позволит возвращать альбомы, у которых нет изображений. ORDER BY … DESC будет сортировать результаты в порядке убывания, но я не уверен, как вернуть только последнюю запись. Возможно, это займет какое-то сочетание ORDER BY, GROUP BY и TOP .
SELECT album_table.album_id, album_table.album_name, images_table.filename FROM album_table INNER JOIN images_table ON images_table.album_id = album_table.album_id WHERE album_table.user_id = uid ORDER BY images_table.date DESC
Я считаю, что INNER JOIN
– это то, что вы ищете
Этот сайт дает хороший пример
@lolwut: Попробуйте –
SELECT album_table.album_id, album_table.album_name, images_table.filename FROM album_table INNER JOIN images_table ON images_table.album_id = album_table.album_id INNER JOIN users_table ON users_table.uid = album_table.user_id WHERE (users_table.uid = ' . $uid . ') ORDER BY images_table.date DESC
$uid
должен быть сеансом текущего входа в систему … или вы можете оставить это WHERE
полностью, если хотите вернуть всю информацию о пользователях.
На самом деле, в этом случае вам нужно только присоединиться к двум таблицам (как общее правило, чем меньше вы присоединяетесь, тем лучше).
Поскольку вы знаете идентификатор пользователя, вы можете запросить его непосредственно из имени таблицы альбомов.
Если в вашей учетной записи users_table появился другой столбец «имя_пользователя», и вы хотели его искать, вам нужно будет присоединиться к таблице пользователей.
SELECT filename, album_name, album_id FROM album_table at, images_table it AND at.album_id = it.album_id AND at.user_id = $user_id