我已安装wp电子商务插件,并自定义构建自定义全局搜索
我的查询如下所示
SELECT * FROM aka_v_posts
LEFT JOIN aka_v_postmeta
ON aka_v_posts.ID=aka_v_postmeta.post_id
AND ((aka_v_postmeta.meta_key=\'_wpsc_special_price\'
AND aka_v_postmeta.meta_value > \'0\')
OR aka_v_postmeta.meta_key=\'_wpsc_price\')
WHERE ( post_title LIKE \'%32%\' OR post_content LIKE \'%32%\' )
AND ( post_status = \'publish\' OR post_status = \'private\' )
AND post_type = \'wpsc-product\'
AND aka_v_postmeta.meta_value BETWEEN 0 AND 999999
ORDER BY aka_v_posts.post_date DESC, aka_v_postmeta.meta_value + 0 ASC
我在这里做的事情是,加入价格,如果产品在销售中,就用销售meta\\u值发布,否则就用meta\\u键“\\u wpsc\\u price”获取
当然,这部分不起作用
AND ((aka_v_postmeta.meta_key=\'_wpsc_special_price\'
AND aka_v_postmeta.meta_value > \'0\')
OR aka_v_postmeta.meta_key=\'_wpsc_price\')
当产品不在销售时,它会直接查询产品,但当产品在销售时,它会显示两次,一次显示“\\u wpsc\\u price”meta\\u键,另一次显示“\\u wpsc\\u special\\u price”,因为1或1是1。所以这个逻辑是完全混乱的。
我用mysql的knolidge做了一些研究,发现了CASE WHENcondition,但从未找到将其应用于当前问题的方法。
有什么建议吗?当然,在没有案例的情况下这样做什么时候会更好
最合适的回答,由SO网友:CBeTJlu4ok 整理而成
谢谢大家的关注。
如果有人需要用两个postmeta查询数据库,下面是代码
SELECT p.*
, CASE WHEN m1.meta_value=0 OR m1.meta_value IS NULL
THEN m2.meta_value
ELSE m1.meta_value
END meta_value
FROM aka_v_posts p
LEFT JOIN aka_v_postmeta m1 ON p.id=m1.post_id AND m1.meta_key=\'_wpsc_special_price\'
LEFT JOIN aka_v_postmeta m2 ON p.id=m2.post_id AND m2.meta_key=\'_wpsc_price\'
WHERE post_title LIKE \'%32%\'
AND post_type = \'wpsc-product\'
ORDER BY aka_v_posts.post_date DESC
要记住的是(至少我做错了),您需要在
FROM
关键字,以选择那些meta\\u值。