我有一个Wordpress的MySQL查询,可以获取高级自定义字段数据。如果其中一条AND行没有结果,则整个查询不提供任何结果。我想知道是否可以在查询中添加一些忽略AND行的内容,如果该行没有结果?
t
例如; wp3.meta_key =' ex_diameter'可能根本不存在,但是不是使用空白的ex_diameter获得结果,而是整个结果为空并且不返回任何行。
答案 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条件下做得不太好(在性能方面)。