0

これは私のクエリです:

SELECT SQL_CALC_FOUND_ROWS wagons.id, 
                       wagons.mid, 
                       wagons.year, 
                       wagons.make, 
                       wagons.model, 
                       wagons.nickname, 
                       wagons.description, 
                       members.first, 
                       members.last, 
                       wagon_photos.filename, 
                       Count(DISTINCT( likes.id ))    AS likes, 
                       Count(DISTINCT( comments.id )) AS comments 
FROM   wagons 
   INNER JOIN members 
           ON members.mid = wagons.mid 
   LEFT JOIN wagon_photos 
          ON wagon_photos.wid = wagons.id 
   LEFT JOIN likes 
          ON likes.wid = wagons.id 
   LEFT JOIN comments 
          ON comments.wid = wagons.id 
GROUP  BY wagons.id 
ORDER  BY wagons.id DESC 
LIMIT  10 

wagon_photos.filenameどこwagon_photos.defaultに最大値があるかを取得しようとしています。(これはブール値で、(各 に対してwagon_photos.wid)wagon_photos.id 1 つの行のみが 1 になります。) メンバーがデフォルトの写真を選択していない可能性がある場合は、可能であれば最低のものを返したいと思います。

ORDER BY と GROUP BY を使ったクエリを数多く試しましたが、それよりも少し複雑かもしれないと思います。WHERE 句を使用すると、写真がリンクされていないワゴンが除外されますが、これは望ましくありません。


CREATE TABLE `wagons` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `mid` int(8) DEFAULT NULL,
  `year` varchar(4) DEFAULT NULL,
  `make` varchar(50) DEFAULT NULL,
  `model` varchar(100) DEFAULT NULL,
  `nickname` varchar(200) DEFAULT NULL,
  `description` mediumtext,
  `featured` int(1) DEFAULT '0',
  `visibility` int(1) DEFAULT '1',
  `commision` int(1) DEFAULT '1',
  `feat1title` varchar(50) DEFAULT NULL,
  `feat2title` varchar(50) DEFAULT NULL,
  `feat3title` varchar(50) DEFAULT NULL,
  `feat4title` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=617 DEFAULT CHARSET=utf8;

CREATE TABLE `wagon_photos` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `wid` int(11) DEFAULT NULL,
  `filename` varchar(255) DEFAULT NULL,
  `caption` varchar(255) DEFAULT '',
  `default` int(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;
4

2 に答える 2

0

さて、私は今少しばかげていると感じています。

wagon_photos の LEFT JOIN の後に追加することを最終的に考え ましたがAND wagon_photos.default = 1、うまくいきました。彼らが常にデフォルト設定を持っていることを確認する必要があるだけなので、写真が更新されるたびにデフォルトをチェックし、設定されていない場合は最新のアップロードをデフォルトとして設定するスクリプトを実行しました.

... LEFT JOIN wagon_photos ON wagon_photos.wid = wagons.id AND wagon_photos.default = 1 ...
于 2013-09-28T19:41:57.253 に答える