您可以将条件添加到having
条款:
SELECT idUser, username, telephone, latitude, longitude,
(6371 * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(longitude) - radians(?)) + sin(radians(?)) * sin(radians(latitude)))) AS distance
FROM main
WHERE active = ? AND idUser != ?
HAVING distance < 5 OR username IN ('mike', 'john');
您可能需要删除idUser
。 。 。我不确定这是否与username
有关。
编辑:
如果你想保证迈克和约翰是一个结果集,你可以这样做:
(SELECT idUser, username, telephone, latitude, longitude,
(6371 * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(longitude) - radians(?)) + sin(radians(?)) * sin(radians(latitude)))) AS distance
FROM main
WHERE active = ? AND idUser != ? AND username NOT IN ('mike', 'john')
HAVING distance < 5
)
UNION ALL
(SELECT idUser, username, telephone, latitude, longitude,
(6371 * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(longitude) - radians(?)) + sin(radians(?)) * sin(radians(latitude)))) AS distance
FROM main
WHERE username IN ('mike', 'john')
)
或者:
SELECT idUser, username, telephone, latitude, longitude,
(6371 * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(longitude) - radians(?)) + sin(radians(?)) * sin(radians(latitude)))) AS distance
FROM main
WHERE (active = ? AND idUser <> ?) OR username IN ('mike', 'john')
HAVING distance < 5 OR username IN ('mike', 'john');
或移动到所有条件HAVING
子句:
SELECT idUser, username, telephone, latitude, longitude,
(6371 * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(longitude) - radians(?)) + sin(radians(?)) * sin(radians(latitude)))) AS distance
FROM main
WHERE (active = ? AND idUser <> ?) OR username IN ('mike', 'john')
HAVING (active = ? AND idUser <> ? AND distance < 5) OR
username IN ('mike', 'john');
是的,那是我正在做的,但是这不起作用。原因是我认为它只会选择活跃为0的用户(假设?为0),并且如果mike没有活跃为0,则它将不起作用 –