Использование счетчика из подзапроса, чтобы определить, должна ли строка быть включена в результирующие строки - PullRequest
1 голос
/ 26 октября 2019

Я создаю веб-сайт, и мне нужен запрос для возврата пользователей на основе близости, используя координаты GPS, но также только в том случае, если у пользователя также есть фотография, помеченная как частная. Таблица фотографий называется 'photos', а идентификатор, к которому принадлежит фотография, - это столбец user_id. Такое же имя столбца также существует в таблице пользователей для каждого пользователя. То, что я пытаюсь сделать, это использовать подзапрос, чтобы увидеть, есть ли у пользователя какие-либо фотографии, помеченные как private (private = 1) в таблице фотографий, и, если это так, вернуть этого пользователя и некоторую базовую информацию.

Для некоторыхпричина, по которой мой запрос не будет работать, и я уже давно борюсь с этим. Любая помощь будет принята с благодарностью!

Вот созданный мной запрос, который не работает. Я пробовал и много других запросов.

SELECT users.user_id, 
       users.display, 
       users.lat, 
       users.lng, 
       users.featured, 
       profile.type, 
       profile.user_id, 
       ( 3959 * Acos(Cos(Radians('41.6032207')) * Cos(Radians(users.lat)) * Cos( 
                                   Radians(users.lng) - Radians('-73.087749')) + 
                              Sin(Radians('41.6032207')) * Sin( 
                              Radians(users.lat))) ) 
                              AS distance, 
       Count(photos.photo_id) 'Photo Count' 
FROM   users, 
       profile 
       INNER JOIN photos 
               ON users.user_id = photos.user_id 
                  AND photos.private = 1 
GROUP  BY users.user_id 
HAVING Count(photos.photo_id) > 0 
       AND users.account_type = '1' 
       AND profile.user_id = users.user_id 
       AND users.active = '1' 
       AND distance <= '10' 

1 Ответ

0 голосов
/ 26 октября 2019

Не следует использовать смешанный (явный и неявный) синтаксис join. Вы должны использовать только явный синтаксис join и переместить условие join из условия having в предложение where:

  SELECT users.user_id, 
         users.display, 
         users.lat, 
         users.lng, 
         users.featured, 
         profile.type, 
         profile.user_id, 
         ( 3959 * Acos(Cos(Radians('41.6032207')) * Cos(Radians(users.lat)) * Cos( 
                                     Radians(users.lng) - Radians('-73.087749')) + 
                                Sin(Radians('41.6032207')) * Sin( 
                                Radians(users.lat))) ) 
                                AS distance, 
         Count(photos.photo_id) `Photo Count`
  FROM   users
  INNER JOIN profile ON profile.user_id = users.user_id 
  INNER JOIN photos ON users.user_id = photos.user_id 
      AND photos.private = 1 
  WHERE users.account_type = '1' 
    AND users.active = '1' 
  GROUP  BY users.user_id 
  HAVING Count(photos.photo_id) > 0 
    AND distance <= '10' 

, и вы должны использовать обратные метки для составного имени столбца (не одного)цитата)

...