簡體   English   中英

MySQL從按左連接表計數排序的多個表中選擇

[英]MySQL Select from multiple tables ordered by count of left joined table

我一直在嘗試從多個表中選擇數據,而我是按照我通過左聯接聯接的另一個表中的ID計數進行排序的。 一切工作都很好,除了計數增加了600左右,而不是每行增加一個。

正如我在類似問題中看到的那樣,我嘗試在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

有任何想法嗎? 謝謝!

乍一看,您的問題可能是因為沒有ON子句而使pd和p交叉連接。 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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM