[MySQL] сложный запрос

rtyug
На сайте с 13.05.2009
Offline
263
773

я хотел вывести 2 фотографии с последних фотоальбомов... с последних 5 фотоальбомов (или 10-20)

нужно проверить доступность фотоальбома и доступность фотографии

(я хотел вывести первую фотографии в фотоальбоме и последнюю фотографию в нем же, всего 2 вывести)

у меня не получается проверить, если я ставлю id_pf_min в where он пишет что не извесный id_pf_min вообще!!

вообщем, как пропутить тот фотоальбом в котором нету фотографии и в котором id_pf_min не равняется

SELECT t1.privat_pa,
t1.id_pa,
t1.name_pa,

(SELECT MIN(t6.id_pf) FROM photo_files AS t6 WHERE t6.id_pa = t1.id_pa '.$sql_p.' ) AS id_pf_min,
(SELECT MAX(t5.id_pf) FROM photo_files AS t5 WHERE t5.id_pa = t1.id_pa AND t5.id_pf > id_pf_min '.$sql_p2.' ) AS id_pf_max

FROM photo_albums AS t1

LEFT JOIN photo_files AS t6
t6.id_pa = t1.id_pa '.$sql_p.'


LEFT JOIN content AS t2
ON t1.id_co = t2.id_co
' . $sql2 . '
' . $sql . '
AND id_pf is not null
ORDER BY t1.created desc
LIMIT 5

кстате, в последнее время хитрые запросы на MySQL пишутся архисложно, на PgSQL подобное давным давно доступно для использование... пожет использовать исключительно PgSQL?

rtyug добавил 25.04.2010 в 06:19

хе-хе

сделал, добавил INNER JOIN и в него вставил через ON IN вложенный запрос:


SELECT t1.privat_pa,
t1.id_pa,
t1.name_pa,

(SELECT MIN(t6.id_pf) FROM photo_files AS t6 WHERE t6.id_pa = t1.id_pa '.$sql_p.' ) AS id_pf_min,
(SELECT MAX(t5.id_pf) FROM photo_files AS t5 WHERE t5.id_pa = t1.id_pa AND t5.id_pf > id_pf_min '.$sql_p2.' ) AS id_pf_max

FROM photo_albums AS t1

INNER JOIN photo_files AS t77
ON t77.id_pf in (SELECT MIN(t6.id_pf) FROM photo_files AS t6 WHERE t6.id_pa = t1.id_pa '.$sql_p.' )



LEFT JOIN content AS t2
ON t1.id_co = t2.id_co
' . $sql2 . '
' . $sql . '
AND id_pf is not null
ORDER BY t1.created desc
LIMIT 5

================

================

а вот есть для видео тоже самое:

(только есть таблица video_files_preview еще одна, треья, с превиюшками )

можно ли это оптимизировать? опять таки кажется что на PgSQL такое по проще и по легче?

повторюсь, в where не работает если вставить алиас id_vf_min


SELECT
t1.id_va,
t1.privat_va,
t1.name_va ,

( SELECT MIN(t20.id_vf) FROM video_files AS t20
WHERE t20.id_va = t1.id_va ) AS id_vf_min,

(
SELECT MIN(t10.id_vfp)
FROM video_files_preview AS t10
WHERE t10.id_vf = id_vf_min

) AS vf_preview_min,




( SELECT MAX(t21.id_vf) FROM video_files AS t21
WHERE t21.id_va = t1.id_va ) AS id_vf_max,

(
SELECT MAX(t11.id_vfp)
FROM video_files_preview AS t11
WHERE t11.id_vf = id_vf_max

) AS vf_preview_max




FROM video_albums AS t1

INNER JOIN video_files_preview AS t77
ON t77.id_vfp in (
SELECT MIN(t10.id_vfp)
FROM video_files_preview AS t10
WHERE t10.id_vf in ( SELECT MIN(t20.id_vf) FROM video_files AS t20
WHERE t20.id_va = t1.id_va )
)


LEFT JOIN content AS t2
ON t1.id_co = t2.id_co

ORDER BY t1.created desc
LIMIT 5

Your MySQL connection id is 41076
Server version: 5.0.83-log FreeBSD port: mysql-server-5.0.83

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
N
На сайте с 06.05.2007
Offline
419
#1

Предлагаешь по неработающим запросам восстановить структуру таблиц, отгадать что тебе нужно и написать нормальный запрос?

попробуй все же выложить дамп.

Кнопка вызова админа ()
rtyug
На сайте с 13.05.2009
Offline
263
#2

сделал так:

добавил вложенній в FROM

SELECT t1.privat_pa,
t1.id_pa,
t1.name_pa,
id_pf_min,

(SELECT MAX(t5.id_pf) FROM photo_files AS t5
WHERE t5.id_pa = t1.id_pa AND t5.id_pf > id_pf_min '.$sql_p2.' ) AS id_pf_max

FROM photo_albums AS t1,
(SELECT MIN(t6.id_pf) FROM photo_files AS t6,photo_albums AS t1
WHERE t6.id_pa = t1.id_pa '.$sql_p.' ) AS id_pf_min

LEFT JOIN content AS t2
ON t1.id_co = t2.id_co
' . $sql2 . '
' . $sql . '
AND id_pf_min > 0

ORDER BY t1.created desc
LIMIT 5

и в INNER JOIN вложенный

SELECT  
t1.id_va,
t1.privat_va,
t1.name_va ,

( SELECT MIN(t20.id_vf) FROM video_files AS t20
WHERE t20.id_va = t1.id_va '.$sql_p.' ) AS id_vf_min,

(
SELECT MIN(t10.id_vfp)
FROM video_files_preview AS t10
WHERE t10.id_vf = id_vf_min
) AS vf_preview_min,


( SELECT MAX(t21.id_vf) FROM video_files AS t21
WHERE t21.id_va = t1.id_va AND t21.id_vf > id_vf_min '.$sql_p2.') AS id_vf_max,

(
SELECT MAX(t11.id_vfp)
FROM video_files_preview AS t11
WHERE t11.id_vf = id_vf_max
) AS vf_preview_max



FROM video_albums AS t1
INNER JOIN video_files AS t78
ON t78.id_vf in ( SELECT MIN(t20.id_vf) FROM video_files AS t20
WHERE t20.id_va = t1.id_va '.$sql_p.' )
INNER JOIN video_files_preview AS t77
ON t77.id_vfp in (
SELECT MIN(t10.id_vfp)
FROM video_files_preview AS t10
WHERE t10.id_vf = t78.id_vf
)

LEFT JOIN content AS t2
ON t1.id_co = t2.id_co
' . $sql2 . '
' . $sql . '

ORDER BY t1.created desc
LIMIT 5
[Удален]
#3

rtyug, пробелы то нельзя поотрезать? смотреть на это никто даже при большом желании не станет, уважайте оппонентов :)

rtyug
На сайте с 13.05.2009
Offline
263
#4

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

[Удален]
#5

rtyug, странно %)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий