如何修复 SQLSTATE [21000]:违反基数:1241 操作数应包含 1 列
How to fix SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
当 运行 以下代码时,我收到 sql 错误。我是 SQL 的新手。所以,如果这是一个愚蠢的问题,请忽略。以下是我的 SQL 查询 return 一些用户基于他们的位置
SELECT DISTINCT e.* FROM users u WHERE (u.id IN (SELECT id,
(6371 * acos(
cos( radians(9.9894229) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(76.57897489999999) ) + sin( radians(9.9894229) ) * sin( radians( latitude ) )
)
)
AS distance
FROM users_geo_data
HAVING distance < 20
)) ORDER BY u.time_created desc, u.id desc LIMIT 10
但我收到错误提示
SQLSTATE[21000]:违反基数:1241 操作数应包含 1 列
PS:
- 由于平台的内置数据库架构,我只能通过 where 子句使用半径搜索子查询。
- 另一件事是我可能必须根据距离(自定义)或根据 time_created(默认)
对搜索结果进行排序
问题是 IN
子查询 returns 多于一列。因此,将距离计算移动到 where
子句:
u.id IN (SELECT id
FROM users_geo_data
WHERE (6371 * acos(
cos( radians(9.9894229) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(76.57897489999999) ) + sin( radians(9.9894229) ) * sin( radians( latitude ) ) < 20
)
当 运行 以下代码时,我收到 sql 错误。我是 SQL 的新手。所以,如果这是一个愚蠢的问题,请忽略。以下是我的 SQL 查询 return 一些用户基于他们的位置
SELECT DISTINCT e.* FROM users u WHERE (u.id IN (SELECT id,
(6371 * acos(
cos( radians(9.9894229) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(76.57897489999999) ) + sin( radians(9.9894229) ) * sin( radians( latitude ) )
)
)
AS distance
FROM users_geo_data
HAVING distance < 20
)) ORDER BY u.time_created desc, u.id desc LIMIT 10
但我收到错误提示
SQLSTATE[21000]:违反基数:1241 操作数应包含 1 列
PS:
- 由于平台的内置数据库架构,我只能通过 where 子句使用半径搜索子查询。
- 另一件事是我可能必须根据距离(自定义)或根据 time_created(默认) 对搜索结果进行排序
问题是 IN
子查询 returns 多于一列。因此,将距离计算移动到 where
子句:
u.id IN (SELECT id
FROM users_geo_data
WHERE (6371 * acos(
cos( radians(9.9894229) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(76.57897489999999) ) + sin( radians(9.9894229) ) * sin( radians( latitude ) ) < 20
)