1
複数のテーブルからデータを選択しようとしましたが、左結合で結合した追加テーブルのIDをソートします。すべては、カウントが各行ごとに1つではなく600somethingで増やされることを除いて、素晴らしいことです。MySQL複数のテーブルから選択します。左結合テーブルの数で順序付けします。
同様の問題で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
任意のアイデア?ありがとうございました!
私もこのクエリを実行することができませんでした:http://sqlfiddle.com/#!2/88491/1は、エラーを修正してください? –
まだ壊れている:http://sqlfiddle.com/#!2/88491/4必要ならば、そのSQL Fiddleの例を使ってデバッグすることができます。 –
@PaulBelloraこれは、設定した最初の作成テーブルに基づいて動作しています。申し訳ありません。ありがとうございました – lpetren