gpt4 book ai didi

MySQL连接多个表?

转载 作者:行者123 更新时间:2023-11-29 13:48:28 33 4
gpt4 key购买 nike

我有3张 table

tbl标记tbl 评论tbl图片

我想返回 tblMarkers 中的所有记录以及每个标记的所有评论和图像的计数。更复杂的是,它应该返回已知点半径内的所有标记。

所以预期的结果是

MarkerID-MarkerName-ReviewCount-ImageCount

1223-SomeName-0-1

这是我到目前为止所拥有的,它返回评论计数,但我无法获得正确的 SQL 来添加图像计数

SELECT
`tblMarkers`.`ID`,
`tblMarkers`.`Type`,
`tblMarkers`.`Name`,
`tblMarkers`.`Latitude`,
`tblMarkers`.`Longitude`,
(3959 * acos( cos( radians('45.1') ) * cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians('6') ) + sin( radians('45.1') ) * sin( radians( Latitude ) ) ) )
AS distance,
Count(`tblReviews`.`marker_id`) As reviewCount
FROM
`tblMarkers`
LEFT JOIN `tblReviews` ON `tblMarkers`.`ID` = `tblReviews`.`marker_id`
GROUP BY
`tblMarkers`.`ID`,
`tblMarkers`.`Type`,
`tblMarkers`.`Name`,
`tblMarkers`.`Latitude`,
`tblMarkers`.`Longitude`
HAVING
`distance` < '50'
ORDER BY
distance;

图像表结构是

ID [primaryKey] (same as tblMarkers.ID)
file
title

如何添加所有图像的计数?

最佳答案

试试这个:

SELECT M.ID
, M.Type
, M.Name
, M.Latitude
, M.Longitude
, (3959 * acos(cos(radians('45.1')) * cos(radians(M.Latitude )) * cos(radians(M.Longitude) - radians('6')) + sin(radians('45.1')) * sin(radians(M.Latitude )))) AS distance
, IFNULL(COUNT(DISTINCT R.review_id) , 0) AS ReviewCount
, IFNULL(COUNT(DISTINCT I.ID), 0) AS ImageCount
FROM tblMarkers AS M
LEFT JOIN tblReviews AS R ON R.marker_id = M.ID
LEFT JOIN tblImages AS I ON I.marker_id = M.ID
GROUP BY M.ID, M.Type, M.Name, M.Latitude, M.Longitude
HAVING distance < 50
ORDER BY distance

我打赌您已经知道LEFT JOIN。因此,我使用 COUNT(DISTINCT R.review_id)) 来计算所有不同评论 ID(只需确保 review_id 是唯一的)。如果特定标记记录没有对应的评论和图像记录,我使用 IFNULL(XXX , 0) 显示 0

我用了ALIASES使您的查询干净整洁。欢迎询问。

关于MySQL连接多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17085213/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com