[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите доработать запрос
50shades
Есть запрос:
SELECT t1.id, t1.album_id, t1.url, COUNT(*) as counter, t3.slug, t3.name, t3.create_time
FROM tbl_gallery t1
JOIN tbl_gallery t2 ON t1.album_id = t2.album_id
JOIN tbl_album t3 ON t1.album_id = t3.id
AND t1.id <= t2.id
GROUP BY t1.album_id, t1.id
HAVING counter = 1
ORDER BY album_id DESC


Он получает все альбомы с последней фото в каждом из них. Скажите как в этот запрос еще добавить подсчет количество фоток в каждом альбоме? Перепробовал несколько вариантов - пока тщетно. Спасибо.
Valick
Скорее всего нужно разделить группировку.
Сначала сгруппировать альбомы и посчитать количество фоток в них...
Стоп.
Что-то я не пойму как вы определяете последнюю фотку?
Мне кажется можно проще запрос оформить.
Покажите структуру таблиц.

_____________
Стимулятор ~yoomoney - 41001303250491
killer8080
это что?
...
FROM tbl_gallery t1
JOIN tbl_gallery t2 ON t1.album_id = t2.album_id
...
50shades
Цитата (killer8080 @ 6.02.2013 - 16:16)
это что?
...
FROM tbl_gallery t1
JOIN tbl_gallery t2 ON t1.album_id = t2.album_id
...


объединение таблицы с самой собой

user posted image
user posted image
50shades
UPD. На счет запроса не сомневайтесь, он все свою задачу отлично выполняет.
Valick
create_time - имеет неправильный тип поля. Должен быть TIMESTAMP или DATETIME.
Такое же поле необходимо добавить во вторую таблицу и уже по нему выбирать последнюю фотографию в альбоме.
___
Цитата
объединение таблицы с самой собой

это понятно, но какой смысл в таком объединении?
____
немного запутался, сами фотографии у вас лежат в табдице tbl_gallery?

_____________
Стимулятор ~yoomoney - 41001303250491
Valick
попробуйте вот так
SELECT 	`t1`.`id`, 
`t1`.`album_id`,
`t1`.`url`,
`t2`.`cid`,
`t3`.`slug`,
`t3`.`name`,
`t3`.`create_time`
FROM `tbl_album` `t3`
LEFT JOIN `tbl_gallery` `t1`
ON `t1`.`album_id` = `t3`.`id`
LEFT JOIN (SELECT MAX(id) `mid`, COUNT(id) `cid`
FROM `tbl_gallery`
GROUP BY `album_id`) `t2`
ON `t2`.`mid`=`t1`.`id`
ORDER BY `t1`.`album_id` DESC


_____________
Стимулятор ~yoomoney - 41001303250491
50shades
TIMESTAMP или DATETIME или INT - зависит от удобства, я всегда использую в качестве хранения дат.

Valick, спасибо, но Ваш запрос делает неправильную выборку. Выбирает все записи.
Valick
Цитата
TIMESTAMP или DATETIME или INT - зависит от удобства

вы заблуждаетесь

трудно написать правильный запрос с пустыми таблицами
SELECT 	`t1`.`id`, 
`t1`.`album_id`,
`t1`.`url`,
`t2`.`cid`,
`t3`.`slug`,
`t3`.`name`,
`t3`.`create_time`
FROM `tbl_album` `t3`
RIGHT JOIN `tbl_gallery` `t1`
ON `t1`.`album_id` = `t3`.`id`
RIGHT JOIN (SELECT MAX(id) `mid`, COUNT(id) `cid`
FROM `tbl_gallery`
GROUP BY `album_id`) `t2`
ON `t2`.`mid`=`t1`.`id`
ORDER BY `t1`.`album_id` DESC


_____________
Стимулятор ~yoomoney - 41001303250491
50shades
Valick спасибо огромное, все работает, даже в 2 раза быстрее чем мой запрос.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.