I have wp e-commerce plugin installed and custom building custom global search
My query looks like this
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
The thing I'm doing here, joining prices where if product is on sale, get post with sale meta_value, else get with meta_key "_wpsc_price"
Of course this part is not working
AND ((aka_v_postmeta.meta_key='_wpsc_special_price'
AND aka_v_postmeta.meta_value > '0')
OR aka_v_postmeta.meta_key='_wpsc_price')
It queries products right when product is not on sale, but when it is, it displays it twice, one with "_wpsc_price" meta_key and other with "_wpsc_special_price" Because 1 OR 1 is 1. So this logic is totally messy.
I did a little research with my little of knolidge of mysql and found CASE WHEN condition but never found a way to apply it for current issue.
Any suggestions? Of course doing it without CASE WHEN would be better