gpt4 book ai didi

MySQL从按左连接表的计数排序的多个表中选择

转载 作者:行者123 更新时间:2023-11-30 23:31:17 24 4
gpt4 key购买 nike

我一直在尝试从多个表中选择数据,而我根据 id 的计数从我使用左连接连接的附加表中进行排序。一切都很好,除了计数增加了 600 左右,而不是每行一个。

正如我在类似问题中看到的那样,我尝试将 distinct 放入 count 语句中,但唯一的结果是卡住了数据库。

表格:

CREATE TABLE IF NOT EXISTS `places` (
`PlaceId` int(10) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`AreaId` int(10) NOT NULL DEFAULT '1',
PRIMARY KEY (`PlaceId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `places_descriptions` (
`DescId` int(45) NOT NULL AUTO_INCREMENT,
`PlaceId` int(10) NOT NULL,
`Description` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`DescId`),
KEY `PlaceId` (`PlaceId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0;

CREATE TABLE IF NOT EXISTS `places_hits` (
`HitId` int(45) NOT NULL AUTO_INCREMENT,
`PlaceId` int(45) NOT NULL,
PRIMARY KEY (`HitId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0;

查询:

SELECT 
p.PlaceId,
p.Name,
pd.Description,
COUNT(ph.HitId) AS numHits
FROM
places_descriptions AS pd,
places AS p
LEFT JOIN places_hits AS ph
ON (p.PlaceId = ph.PlaceId)
WHERE
(p.PlaceId = pd.PlaceId) AND
(p.AreaId = 1)
GROUP BY
p.PlaceId,
p.Name,
pd.Description
ORDER BY
numHits DESC,
p.PlaceId
LIMIT 0, 10

有什么想法吗?谢谢!

最佳答案

乍一看,您的问题可能是您交叉连接了 pd 和 p,因为没有 ON 子句。 where 中的 placeId=placeId 通过过滤掉连接不准确的行来掩盖这个问题,但最好将该条件置于 ON 中。尽管我不确定,但在过滤之前实际存在的大量行可能会影响计数。

试试这个,开始:

SELECT 
p.PlaceId,
p.Name,
pd.Description,
COUNT(ph.HitId) AS numHits
FROM
places_descriptions AS pd
INNER JOIN places AS p
ON p.PlaceId = pd.PlaceID
LEFT JOIN places_hits AS ph
ON (p.PlaceId = ph.PlaceId)
WHERE
(p.AreaId = 1)
GROUP BY
p.PlaceId,
p.Name,
pd.Description
ORDER BY
numHits DESC,
p.PlaceId

关于MySQL从按左连接表的计数排序的多个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10476365/

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