MySQL - 如果不存在值,则忽略AND

时间:2016-10-06 22:32:07

标签: mysql wordpress advanced-custom-fields

我有一个Wordpress的MySQL查询,可以获取高级自定义字段数据。如果其中一条AND行没有结果,则整个查询不提供任何结果。我想知道是否可以在查询中添加一些忽略AND行的内容,如果该行没有结果?

t

例如; wp3.meta_key =' ex_diameter'可能根本不存在,但是不是使用空白的ex_diameter获得结果,而是整个结果为空并且不返回任何行。

1 个答案:

答案 0 :(得分:1)

而不是......

 INNER JOIN wp_postmeta as wp11
 ON wp11.post_id=wp0.post_id

 WHERE ...
 AND wp11.meta_key='ex_center'

您可以使用"外部联接"操作而不是"内连接",将条件从WHERE子句移动到连接的ON子句,并删除任何列中需要非NULL值的条件来自wp11 ......

 LEFT JOIN wp_postmeta as wp11
 ON wp11.post_id=wp0.post_id
 AND wp11.meta_key='ex_center'

 WHERE ...

使用外部联接,如果从wp11找不到匹配的行,则wp11中的所有列都将为NULL。 (这就是为什么我们需要将条件从WHERE子句移动到ON子句...... WHERE子句中的条件不能满足于NULL ...

对于任何可以接受行的表格,重复相同的模式"缺少"。

实际上,使用LEFT JOIN,您需要"驾驶"表先。可能首先要在FROM子句中使用wp_posts wpp表,并在外连接条件中引用wpp.id。我真的不需要wp0引用,你可以从wpp.id获得post_id

SELECT
  FROM wp_posts wpp
  LEFT JOIN wp_postmeta wp1 ON wp1.post_id=wpp.id AND wp1.meta_key='_sale_price'
  LEFT JOIN wp_postmeta wp2 ON wp2.post_id=wpp.id AND wp2.meta_key='...'
  LEFT JOIN wp_postmeta wp3 ON wp3.post_id=wpp.id AND wp3.meta_key='...'
  ...
  LEFT JOIN wp_postmeta wp11 ON wp11.post_id=wpp.id AND wp11.meta_key='ex_center'
 WHERE wpp.id = 39

我感觉你刚刚开始体验使用EAV的 joy 。让乐趣开始吧!

要回答你问的问题......不,通过添加OR条件,没有办法解决AND condition,而不是修改条件......

AND ( condition OR some_other_condition )

MySQL有时在OR条件下做得不太好(在性能方面)。