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:
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;