Как исправить SQLSTATE [21000]: Нарушение количества элементов: 1241 Операнд должен содержать 1 столбец (и) - PullRequest
0 голосов
/ 03 августа 2020

Я получаю сообщение об ошибке sql при выполнении следующего кода. Я новичок ie в SQL. Так что проигнорируйте, если это глупый вопрос. Ниже приведен мой запрос SQL для возврата некоторых пользователей в зависимости от их местоположения

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 столбец (s)

PS:

  1. Из-за встроенной в платформу архитектуры db я могу использовать подзапрос поиска по радиусу только через предложение where.
  2. Другое дело, что мне, возможно, придется упорядочить результаты поиска на основе расстояния (настраиваемый) или на основе time_created (по умолчанию)

1 Ответ

1 голос
/ 03 августа 2020

Проблема в том, что подзапрос IN возвращает более одного столбца. Итак, переместите вычисленное расстояние в предложение 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
       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...