php - 使用子查询中的计数来确定行是否应包含在结果行中
问题描述
我正在建立一个网站,我需要一个查询来使用 gps 坐标根据接近度返回用户,但前提是用户还有一张标记为私有的照片。照片表称为“照片”,照片所属的标识符是 user_id 列。每个用户的用户表中也存在相同的列名。我想要做的是使用子查询来查看用户在照片表中是否有任何标记为私有(私有 = 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'
解决方案
您不应使用混合(显式和隐式)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'
并且您应该对复合列名称使用反引号(而不是单引号)
推荐阅读
- php - 如何将 Foreach 的结果保存到 Txt 文件中
- r - 更新闪亮的actionlink的颜色
- xsd - 集成 xsd 验证器(lib 或工具)
- javascript - ExpressJS 网站在本地工作,但在线返回 403 Forbidden
- javascript - 将值映射到对象内的数组
- google-cloud-platform - 在谷歌云中配置路径转发 - 有效,但只能使用 www 前缀?
- php - CakePHP 4 从控制器返回数据到 AJAX 渲染问题
- swift - 如何从地理查询中获取文档?
- java - 使用 Android Emulator 从 Eclipse 执行简单的 Appium 脚本时遇到问题,请帮助我确定问题
- flutter - 如何在颤动的计时器应用程序中添加振动