Тема: Запрос связывающий три таблицы
Столкнулся с такой вот проблемой, до этого не выводил разное содержимое на одну страницу с разнымы хтмл блоками.
Вот решил создать страничку с пользовательской деятельностью и вывести все в таком виде :
такое используют многие сайты, тоесть выводя данные может быть
А
А
А
Б
или
А
Б
Все зависит от колличества записей в таблице.
Я решил связать данные таблицы :
users
id
username
images
id
user_id
image
description
date
user_favorites
id
user_id
image_id
date
и получил такой вот запрос :
$sql = "SELECT
u.username as user,
p.image as user_image,
i.image as uploaded_image,
i.id as image_id,
i.description as text,
UNIX_TIMESTAMP(i.date) as image_date,
COALESCE ( imgcount.cnt, 0 ) as comments,
fav.id as favorite_id,
r.image as favorited_image,
u2.username as favorite_user,
t.image as favorite_user_image
FROM users u
LEFT JOIN images i ON i.user_id = u.id
LEFT JOIN images p ON p.id = (SELECT b.id FROM images AS b where u.id = b.user_id ORDER BY b.id DESC LIMIT 1)
LEFT JOIN (SELECT image_id, COUNT(*) as cnt FROM commentaries GROUP BY image_id ) imgcount ON i.id = imgcount.image_id
LEFT JOIN user_favorites fav ON fav.user_id = u.id
LEFT JOIN images r ON r.id = fav.image_id
LEFT JOIN users u2 ON u2.id = r.user_id
LEFT JOIN images t ON t.id = (SELECT b.id FROM images AS b where u2.id = b.user_id ORDER BY b.id DESC LIMIT 1)
WHERE i.user_id = ?
";
и он выводит :
[everything_list] => Array
(
[0] => Array
(
[user] => 8888
[user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_0j1kjjzdv3ez07a0ee4lnmjb7_163.jpeg
[uploaded_image] => http://127.0.0.1/auth_system_1/upload_images/224/224_0j1kjjzdv3ez07a0ee4lnmjb7_163.jpeg
[image_id] => 4
[text] =>
[image_date] => 1328577934
[comments] => 0
[favorite_id] => 2
[favorited_image] => http://127.0.0.1/auth_system_1/upload_images/100/100_0j1kjjzdv3ez07a0ee4lnmjb7_163.jpeg
[favorite_user] => 8888
[favorite_user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_0j1kjjzdv3ez07a0ee4lnmjb7_163.jpeg
)
[1] => Array
(
[user] => 8888
[user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_0j1kjjzdv3ez07a0ee4lnmjb7_163.jpeg
[uploaded_image] => http://127.0.0.1/auth_system_1/upload_images/224/224_0j1kjjzdv3ez07a0ee4lnmjb7_163.jpeg
[image_id] => 4
[text] =>
[image_date] => 1328577934
[comments] => 0
[favorite_id] => 5
[favorited_image] => http://127.0.0.1/auth_system_1/upload_images/100/100_flw3utn9igiqh7dtt2o61ydf8_174.jpeg
[favorite_user] => 6666
[favorite_user_image] => http://127.0.0.1/auth_system_1/upload_images/24/24_flw3utn9igiqh7dtt2o61ydf8_174.jpeg
)
)
У меня в таблицах храниться 1 изображение и 2 фаворита для данного пользователя, из результата видно что выведено 2 фаворита и 2 картинки (картинка дублируется на количество выведеных строк из бд)
Далее выводя через foreach в html выводится тоже блоки на колличеству строк.
Вот решил спросить на правильном ли я пути делая данную страницу активности использовать 1 запрос ?
Возможно ли будет добиться результата вывода "фаворитов" и "изображений" и отобрать в виде "Ф", "И" , "Ф" не дублируя хтмл блоки?
Просто не зная до конца как сделать я еще сомневаюсь на правильном ли я пути ?