第一次问,所以是异教徒。
我的问题是wordpress中的管理员搜索。我需要找到一个自定义的帖子类型,不仅可以在其上找到搜索词,还可以找到相同的自定义帖子类型,如果在第一个与之相关的其他自定义帖子类型上找到该搜索词。
如果有人不熟悉wordpress数据库结构,这里是关系的图像:
我将只使用wp_posts和wp_postmeta
所以我需要从wp_posts中找到所有优惠券,其标题或内容中包含'lorem'文字 - >
`post_type` LIKE 'coupon' AND (`post_title` LIKE '%lorem%' OR `post_content` LIKE '%lorem%')
但我也在wp_posts自定义帖子类型商家与wp_postmeta中的优惠券相关,其中post_id
是优惠券ID,meta_key
是'merchant'和meta_value
是序列化的值,如:1:{i:0; s:4:“3249”;}其中3249是商家ID。 (我知道,这很奇怪)。
所以我需要以某种方式找出商家的商品,找到相关的优惠券,然后在初始查询中添加优惠券:
`post_type` LIKE 'merchant' AND (`post_title` LIKE '%lorem%' OR `post_content` LIKE '%lorem%')
我设法找到了一种方法,但需要很长时间
SELECT SQL_CALC_FOUND_ROWS wp_posts. *
FROM wp_posts
LEFT JOIN wp_postmeta AS pm
ON wp_posts.ID = pm.post_id
RIGHT JOIN wp_posts AS p2
ON pm.meta_value LIKE CONCAT( '%a:1:{i:0;s:', LENGTH( p2.ID ) , ':"', p2.ID, '";}%' )
WHERE
( wp_posts.post_title LIKE '%lorem%'
OR p2.post_title LIKE '%lorem%'
OR p2.post_content LIKE '%lorem%'
OR wp_posts.post_content LIKE '%lorem%'
)
AND wp_posts.post_type = 'coupon'
AND p2.post_type = 'merchant'
AND pm.meta_key = 'merchant'
ORDER BY wp_posts.post_title LIKE '%lorem%' DESC , wp_posts.post_date DESC
LIMIT 0 , 20
对于7个结果需要1.6027秒。
提前致谢