【发布时间】:2012-05-15 14:57:49
【问题描述】:
我一直在尝试从多个表中选择数据,而我通过左连接加入的另一个表中的 id 计数进行排序。一切都很好,只是计数增加了 600something 而不是每行一个。
正如我在类似问题中看到的那样,我尝试将 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
有什么想法吗?谢谢!
【问题讨论】:
-
我什至无法运行此查询:sqlfiddle.com/#!2/88491/1 请修复错误?
-
仍然损坏:sqlfiddle.com/#!2/88491/4 如果需要,您可以使用该 SQL Fiddle 示例进行调试。
-
@PaulBellora 现在它基于您设置的第一个创建表工作。对不起,谢谢你
-
实际上,您可以发布这些实际表格的详细信息吗?我的 SQL Fiddle 示例中的表只是让查询运行的快速丢弃物,但它们实际上没有意义,例如相互引用的主键。抱歉不是故意让你感到困惑。
-
就是这样,感谢您的调查