我正在运行一个wordpress网站。
我需要在数据库中查询具有2个元密钥集的EITHER的用户。见下面的代码。可以为用户分配元值g,h,i和j。如果设置了全部4个,则代码中的AND / OR工作正常。 但如果只设置了2,则根本找不到用户。我假设这是因为mysql将值识别为空白(或未设置,因为有时它们甚至不在usermeta中),因此无法对它们执行数学运算。
有没有办法完成我想要做的事情,允许元值i和j为空白或不设置?
select distinct a.ID
from wp_users as a ,
wp_usermeta as b ,
wp_usermeta as g ,
wp_usermeta as h ,
wp_usermeta as i ,
wp_usermeta as j ,
where 1=1 and b.user_id = a.ID and g.user_id = a.ID and h.user_id = a.ID and i.user_id = a.ID and j.user_id = a.ID and g.meta_key='_blat' and h.meta_key='_blng' and i.meta_key='_hlat' and j.meta_key='_hlng' and a.ID NOT IN (0) and b.meta_key = 'last_name'
AND ( ( ( ( ( 35.2091855 - g.meta_value ) / 2 ) + ( -89.7989767 - h.meta_value ) / 2) < 16.09344 )
OR ( ( ( ( 35.2091855 - i.meta_value ) / 2 ) + ( -89.7989767 - j.meta_value ) < 16.09344 ) ) )
order by b.meta_value asc
limit 0,25
答案 0 :(得分:1)
不确定,如果未设置元值,所需的结果应该是什么。
如何使用IFNULL(g.meta_value,0)。如果未设置g.meta_value(null),则返回零。
我的意思是将以下行改为;
OR ( ( ( ( 35.2091855 - IFNULL(i.meta_value, 0) ) / 2 ) + ( -89.7989767 - IFNULL(j.meta_value, 0) ) < 16.09344 ) ) )
如果未设置i和j,则将导致-72.19438395&lt; 16.09344将始终返回TRUE。无法弄清楚这是否有帮助,或者如果没有设置i和j,条件应该导致...