WordPress MySQL запрос на миниатюру сообщения - PullRequest
1 голос
/ 27 июня 2010

Я пытаюсь сделать запрос, чтобы получить заголовок, ссылку и изображения. У меня есть то, что мне нужно с помощью следующего запроса:

SELECT WPPOSTS.post_title,WPPOSTS.guid,WPPOSTS_2.image
FROM wp_posts WPPOSTS
LEFT JOIN
( 
SELECT guid AS image,post_parent
FROM  wp_posts
WHERE post_type = 'attachment'
ORDER BY post_date_gmt DESC
) WPPOSTS_2 ON (WPPOSTS_2.post_parent = WPPOSTS.ID)
WHERE WPPOSTS.ID IN (2439,2395,2355)

Теперь я действительно хочу, чтобы в пост вставлялся только последний эскиз, а не все. Вот почему я уже рассмотрел порядок по пунктам. Я попытался поместить «LIMIT 1» в «LEFT JOIN SELECT», но думаю, что это неправильно

Есть идеи? Спасибо

Ответы [ 2 ]

4 голосов
/ 18 апреля 2012

Я публикую свое решение, так как это может помочь и другим. Поскольку приведенный выше код работает, но также печатает NULL-элементы для max (c.guid), я фильтрую эти результаты. Кроме того, легче получить результаты, если возвращаемый ассоциативный массив получает хорошие имена:

SELECT a.post_title title, max(c.guid) img_url, a.ID id
FROM wp_posts a

LEFT JOIN
(select post_parent, max(post_date_gmt) as latest_image_date from wp_posts
where post_type='attachment' GROUP BY post_parent) b 
on a.id=b.post_parent

LEFT JOIN wp_posts c
on c.post_parent=a.id 
and c.post_type='attachment' 
and b.latest_image_date = c.post_date_gmt where c.guid IS NOT NULL

GROUP BY a.post_title ORDER BY a.ID

mysql_fetch_array () может выглядеть так:

title   img_url     id
Despre  http://localhost/drumliber/wp-content/uploads/2009...   2
Brandul de tara al Romaniei - imnul turistic    http://localhost/drumliber/wp-content/uploads/2009...   9
1 голос
/ 27 июня 2010

Вы не хотите ставить LIMIT для вашего вложенного выбора, потому что он найдет только 1 строку, а не одну строку для каждого сообщения, как вы собираетесь.

Вы можете использовать вложенный выбор, чтобы найти МАКС (post_date_gmt) для каждого поста (я думаю, вы захотите GROUP BY post_parent?), А затем выбрать направляющую для изображения, которое соответствует самой высокой дате поста.

Попробуйте что-то вроде следующего (я не проверял это, поэтому возьмите его с крошкой соли):

SELECT a.post_title,max(c.guid)
FROM wp_posts a

LEFT JOIN
(select post_parent, max(post_date_gmt) as latest_image_date from wp_posts
where post_type='attachment' GROUP BY post_parent) b 
on a.id=b.post_parent

LEFT JOIN wp_posts c
on c.post_parent=a.id 
and c.post_type='attachment' 
and b.latest_image_date = c.post_date_gmt

GROUP BY a.post_title

Окончательный выбор MAX для guid для каждого поста был просто попыткой гарантировать уникальность в маловероятном случае, когда на одном посте есть несколько изображений с одинаковой отметкой времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...