【问题标题】:meta key and meta_value query in wordpresswordpress 中的元键和元值查询
【发布时间】:2013-11-23 07:58:28
【问题描述】:

我在wordpress中运行查询成功。查询如下。

SELECT wp_posts.*, wp_postmeta.meta_value FROM wp_posts, wp_postmeta, wp_term_relationships, wp_terms 
WHERE term_id = '12' AND term_taxonomy_id = '12' AND ID = post_id 
AND ID = object_id AND post_type = 'property' AND post_status = 'publish' 
AND meta_key = 'property_amount' AND replace( replace(meta_value, ',', ''), '"', '' ) >= 1 
GROUP BY wp_posts.ID ORDER BY replace( replace(meta_value, ',', ''), '"', '' ) DESC 
LIMIT 0, 10

但我想在上面的查询中再添加一个 meta_key 及其值条件,所以我将查询更改为这个

  SELECT wp_posts.*, wp_postmeta.meta_value FROM wp_posts, wp_postmeta, wp_term_relationships, wp_terms 
  WHERE term_id = '12' AND term_taxonomy_id = '12' AND ID = post_id
  AND ID = object_id AND post_type = 'property' AND post_status = 'publish' 
  AND meta_key = 'property_amount' AND replace( replace(meta_value, ',', ''), '"', '' )
>= 1
  AND meta_key="property_land_type" and meta_value IN ('L','H','C')
  GROUP BY wp_posts.ID ORDER BY replace( replace(meta_value, ',', ''), '"', '' ) DESC 
  LIMIT 0, 10

以下行在第一个查询中是额外的

meta_key="property_land_type" and meta_value in ('L','H','C')

但它不起作用。怎么做。这次我不能写 WP_Query,因为我有很多基于这个查询的其他查询。

提前致谢!!!

【问题讨论】:

  • 你得到什么错误信息?

标签: mysql wordpress


【解决方案1】:

你有多个 meta_keys 针对一列你需要 IN() 用于 meta_key 和值,如

meta_key IN( 'property_amount','property_land_type') 
AND meta_value IN ('L','H','C',replace( replace(meta_value, ',', ''), '"', '' ) >= 1)

试试这个查询

SELECT wp_posts.*, wp_postmeta.meta_value FROM 
wp_posts, wp_postmeta, wp_term_relationships, wp_terms 
WHERE term_id = '12' AND term_taxonomy_id = '12' AND ID = post_id 
AND ID = object_id AND post_type = 'property' AND post_status = 'publish' 
AND meta_key IN( 'property_amount','property_land_type') 
AND meta_value IN ('L','H','C',replace( replace(meta_value, ',', ''), '"', '' ) >= 1)
GROUP BY wp_posts.ID ORDER BY replace( replace(meta_value, ',', ''), '"', '' ) DESC 
LIMIT 0, 10

编辑

用 join 试试这个,我已经为两个 meta_keys 加入了 wp_postmeta 两次

SELECT wp.*, wpm1.meta_value AS `propert_type`,
wpm2.meta_value AS `property_amount`
FROM 
wp_posts  wp
LEFT JOIN wp_postmeta wpm1 ON (wp.ID = wpm1.post_id)
LEFT JOIN wp_postmeta wpm2 ON (wp.ID = wpm2.post_id)
INNER JOIN wp_term_relationships wptr ON (wp.ID = wptr.object_id)
INNER JOIN `wp_term_taxonomy` wptt ON (wptr.term_taxonomy_id = wptt.term_taxonomy_id)
INNER JOIN wp_terms wpt ON (wptt.term_id = wpt.term_id)

WHERE wpt.term_id = '12' AND wptr.term_taxonomy_id = '12' 
AND  wp.post_type = 'property' AND wp.post_status = 'publish'
AND wpm1.meta_key = 'property_land_type' 
AND wpm2.meta_key = 'property_amount'
AND REPLACE( REPLACE(wpm2.meta_value, ',', ''), '"', '' ) >= 1
AND wpm1.meta_value IN ('L','H','C') AND  wpm1.meta_value IS NOT NULL AND  wpm2.meta_value IS NOT NULL 
GROUP BY wp.ID ORDER BY REPLACE( REPLACE(wpm2.meta_value, ',', ''), '"', '' ) DESC 
LIMIT 0, 10

【讨论】:

  • 我又得到了一个测试用例,这个查询不起作用,伙计。 :( 如果我有一条没有任何 property_land_type 的记录,则表示它为 NULL,但其价格大于 1,在这种情况下,它也会记录该记录,因为金额 > 1
  • 没关系,但我有很多基于搜索和排序的查询。所以你能告诉我没有加入意味着只使用 2 次 postmeta 表。
【解决方案2】:

在您的第二个查询中,您有两个相互矛盾的条件:meta_key = 'property_amount' AND meta_key="property_land_type"

没有结果同时满足这两个条件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2014-11-19
    • 2020-04-19
    相关资源
    最近更新 更多