wp mysql查询按其他帖子类型

时间:2015-08-26 11:13:58

标签: mysql wordpress

第一次问,所以是异教徒。

我的问题是wordpress中的管理员搜索。我需要找到一个自定义的帖子类型,不仅可以在其上找到搜索词,还可以找到相同的自定义帖子类型,如果在第一个与之相关的其他自定义帖子类型上找到该搜索词。

如果有人不熟悉wordpress数据库结构,这里是关系的图像: enter image description here

我将只使用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秒。

提前致谢

0 个答案:

没有答案