Hello I was wondering how can I make comparisons between the meta_key and meta_value columns found in the wp_postmeta table?
For Example:
Lets assume that I want to select all the post_id's WHERE _wpml_media_featured is equal to 1 and WHERE _stock_status is equal to instock.
I used this code:
SELECT * FROM `Ab64Zf55_postmeta` WHERE
(`meta_key` = "_wpml_media_featured" AND `meta_value` = 1 )
AND
(`meta_key` = "_stock_status" AND `meta_value` = "instock" )
But I got 0 results returned from this query!
QUESTION:
- What am I doing wrong or how can I modify my code to get what I need?
-Thanks in advance for your help!
CodePudding user response:
you can select all wp_postmeta record with _wpml_media_featured = 1 or _stock_status = instock then group the result by post_id
SELECT post_id FROM Ab64Zf55_postmeta
WHERE ( meta_key = '_wpml_media_featured' AND meta_value = 1 )
OR ( meta_key = '_stock_status' AND meta_value = 'instock' )
GROUP BY post_id
the above query will give you the list of all the unique post_id
just remember if you select all column (SELECT *), you'll get sql error if only_full_group_by is turned on in your database engine.
Another method is to query the wp_posts table first and separately inner join the two meta fields, this method allows you to pull the record from wp_posts table like post title
SELECT
post.ID,
post.post_title,
wmf.meta_value media_featured,
stock.meta_value stock
FROM wp_posts post
INNER JOIN wp_postmeta wmf
ON post.ID = wmf.post_id
AND wmf.meta_key = '_wpml_media_featured'
AND wmf.meta_value = 1
INNER JOIN wp_postmeta stock
ON post.ID = stock.post_id
AND stock.meta_key = '_stock_status'
AND stock.meta_value = 'instock'

