Внутреннее соединение с 3 столами

Я работаю с PHP и PDO, и мне нужно переосмыслить информацию, объединяющую 3 таблицы:

  • фото
  • альбомы
  • album_photos

Таблица имеет следующую структуру:

фото:

photo_id (int) path (varchar) nick (varchar) date (timestamp) 

альбомы

 album_id (int) album_name (varchar) nick (varchar) date (timestamp) 

album_photos

 album_id (int) photo_id (int) nick (varchar) date (timestamp) 

Итак, я хочу показать все альбомы с максимальным количеством 5 фотографий для каждого, где пользовательский ник является «владельцем» .

Чтобы показать следующее:

 album_name_1: [photo_1] [photo_2] [photo_3] [photo_4] [photo_5] album_name_2: [photo_1] [photo_2] [photo_3] [photo_4] [photo_5] 

Я знаю только, что что-то подобное можно сделать с помощью INNER JOIN, но я не могу найти, как я могу сделать это с 3 таблицами.

Есть примеры или другая помощь, которую я могу сделать для этого?

 SELECT a.*, c.date FROM Album a INNER JOIN Album_Photo b ON a.Album_ID = b.Album_ID INNER JOIN Photo c ON b.Photo_ID = c.Photo_ID WHERE c.Nick = 'owner' AND ( SELECT COUNT(*) FROM album_photo d WHERE b.album_id = d.album_id AND d.nick = 'owner' AND b.date >= d.date ) <= 2 // <<== change this value to 5 
  • Демоверсия SQLFiddle

Я думаю, что это можно решить, используя хранимые процедуры. Используя переменные и циклы , вы можете получить нужные записи. Получение только максимум 5 записей из альбома довольно сложно, когда вы используете только основные команды SQL. Иногда вы не можете получить правильные записи. Я предлагаю вам использовать Stored Proc. 🙂

Попробуйте

 "SELECT albums.*,photos.id,photos.path,photo_date as Pht_date FROM albums JOIN album_photos ON album_photos.album_id = albums.album_id JOIN photos ON photos.photos_id = album_photos_id " 

Но вы продолжаете давать индивидуальный лимит для фотографий, где он участвует в «JOIN», вам нужно дать индивидуально, как

 $album_ids = "SELECT album_id FROM albums"; 

то для фотографий вам нужно написать запрос liks

 "SELECT photos.* FROM photos WHERE album_photos.album_id in (".$album_ids.") AND album_photos.nick = 'owner' JOIN album_photos ON album_photos.photo_id = photos.photos_id LIMIT 0,10 "