подскажите плз по вложенному запросу.

antonim

Новичок
подскажите плз по вложенному запросу.

вот запрос который не работает:

SELECT *
FROM T_photo
WHERE T_produce_id IN ( SELECT id
FROM T_produce P1
WHERE visible > 0
ORDER BY P1.date_add
LIMIT 12 OFFSET 0 )

Не работает из-за строчек :

ORDER BY P1.date_add
LIMIT 12 OFFSET 0

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


на всяк случай говорю что запрос упростил чтоб решить проблему, вот полный запрос:

SELECT *
FROM T_photo
WHERE T_produce_id IN (
SELECT P1.id
FROM T_produce P1
WHERE visible > 0
AND P1.T_top_menu_id IN ( SELECT id
FROM T_top_menu T1
WHERE T1.parent = $parent
AND visible >0 )
ORDER BY P1.date_add
LIMIT 12 OFFSET 0 )
 

RUNET

Новичок
ммм
а join' ами не умнее будет ?
или я что-то таки не допонял ...
 

Gas

может по одной?
antonim
у тебя не вложенный запрос, а подзапрос. Перепиши на джойн c вложенным запросом:
select ...
join (select ...) on
вместо in (select ...)

При джойне с derived-query индексы конечно не используются, но если в нём мало результатов, то оптимизатор его поставит первым и индексы при джойне будут учитываться. Хотя до mysql 5.4 даже и думать не нужно, in (select) полный тормоз.
 

antonim

Новичок
вы наверно имели в виду запрос типа такого:
SELECT PH1.*
FROM T_produce P1 JOIN T_photo PH1 ON P1.id = PH1.T_produce_id
WHERE P1.visible > 0
ORDER BY P1.date_add
LIMIT 12 OFFSET 0

Но он не даст нужного мне результата. с помощью LIMIT я нахожу кол-во не результирующих записей, а выбираю нужные записи таблицы T_produce, чтобы потом уже найти все записи таблицы T_photo которые соответствуют выбранным записям из таблицы T_produce. Т.е. В результате может быть 30 или 100 записей.
 

RUNET

Новичок
PHP:
SELECT * 
FROM T_photo as `f`
INNER JOIN `T_produce` as `p` ON `p`.`id` = `f`.`T_produce_id`
INNER JOIN `T_top_menu` as `m` ON `m`.`id` = `p`.`T_top_menu_id`
WHERE `p`.`visible` > 0 AND `m`.`visible` > 0 AND `m`.`parent` = "'.$parent.'"
ORDER BY `p`.`date_add` 
LIMIT 12
ммм ?
 

antonim

Новичок
тут будет выводиться 12 записей в результате. Я выше описал в чем ошибочность такого решения.
 

RUNET

Новичок
Автор оригинала: antonim
тут будет выводиться 12 записей в результате. Я выше описал в чем ошибочность такого решения.
а убрать limit религия не позволяет? :D
 

Splurov

Новичок
Автор оригинала: antonim
вы наверно имели в виду запрос типа такого:
Gas имел ввиду запрос типа такого:
Код:
SELECT *
FROM T_photo ph
JOIN (
  SELECT id
  FROM T_produce
  WHERE visible > 0
  ORDER BY date_add
  LIMIT 12 OFFSET 0
) AS pr ON (ph.T_produce_id = pr.id)
 

antonim

Новичок
Автор оригинала: Splurov
Gas имел ввиду запрос типа такого:
Код:
SELECT *
FROM T_photo ph
JOIN (
  SELECT id
  FROM T_produce
  WHERE visible > 0
  ORDER BY date_add
  LIMIT 12 OFFSET 0
) AS pr ON (ph.T_produce_id = pr.id)
Спасибо! Даже не знал, что так можно!
 
Сверху