Объединение 3-х трех столов - PullRequest
4 голосов
/ 22 марта 2011

У меня есть эта диаграмма, которая должна объяснить мою ситуацию. Мне нужна помощь в соединении 3 таблиц, которые я не знаю, как это сделать:

enter image description here

Так что я могу пройти через цикл получения записей, выполнив это:

<img src="<?php echo $row['filename']; ?>" alt="" />

Album: <?php echo $row['album_name']; ?> 
AlbumID: <?php echo $row['album_id']; ?>

Ответы [ 4 ]

6 голосов
/ 22 марта 2011

Использование 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
0 голосов
/ 22 марта 2011

На самом деле, в этом случае вам нужно только объединить две таблицы (как правило, чем меньше соединений вы делаете, тем лучше).

Поскольку вы знаете идентификатор пользователя, вы можете запросить, чтонепосредственно от имени таблицы альбома.

Если в вашей user_table есть еще один столбец "user_name", и вы хотите выполнить поиск по нему, то вам необходимо присоединиться к таблице пользователей.

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
0 голосов
/ 22 марта 2011

@ 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, если хотите вернуть информацию всех пользователей.

0 голосов
/ 22 марта 2011

Я считаю, что INNER JOIN - это то, что вы ищете

Этот сайт дает хороший пример

http://www.w3schools.com/sql/sql_join_inner.asp

...