Custom MySQL Query with logic

时间:2013-03-17 作者:CBeTJlu4ok

我已安装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,但从未找到将其应用于当前问题的方法。

有什么建议吗?当然,在没有案例的情况下这样做什么时候会更好

1 个回复
最合适的回答,由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值。

结束