I have a wordpress install with custom post types where I would like to find the ‘previous’ and ‘next’ custom post type object via mysql.
I have read many questions/answers on SO regarding how to achieve this when using the ID. The issue is that a lot of these objects were input at different times, so their numeric ‘id’ order does not necessarily correspond with their string post_title
order.
eg:
x
ID | post_title
7 | a
1 | b
3 | c
The SQL query:
SELECT ID, post_title
FROM wp_posts
WHERE post_type = 'custom_type'
ORDER BY post_title ASC
Gives me the results. If I know the ID
, for example b, 1
from above, how could I find that, when ordered by post_title
, that the adjacent posts are 7
and 3
?
Advertisement
Answer
You can do this with union all
:
(SELECT ID, post_title
FROM wp_posts
WHERE post_type = 'custom_type' and
post_type < (select post_title from wp_posts where post_type = 'custom_type' and id = 1)
ORDER BY post_title DESC
LIMIT 1, 1
)
UNION ALL
(SELECT ID, post_title
FROM wp_posts
WHERE post_type = 'custom_type' and
post_type > (select post_title from wp_posts where post_type = 'custom_type' and id = 1)
ORDER BY post_title ASC
LIMIT 1
)
ORDER BY ID;