2017-03-10 10 views
0

私は次のスクリプトを実行していますWHERE MAXは無視:MySQL - 同じクエリ内のCOUNTとMAX。句

SELECT a.*, 
    gg.image as 'recent_image_file' 
FROM 

( SELECT c.cid, 
      c.category_name AS 'cat_name', 
      COUNT(g.id) AS image_count, 
      c.category_image AS 'images', 
      c.estgendpref, 
      MAX(n.id) as 'recent_image' 
    FROM tbl_category c 
    LEFT JOIN tbl_gallery_category g 
     ON c.cid=g.cat_id 
    LEFT JOIN tbl_gallery n 
     ON n.id=g.image_id 

    WHERE n.date_active < NOW() 
    GROUP BY c.cid 
    ORDER BY c.category_name ASC 
) a 

INNER JOIN tbl_gallery gg 
    ON a.recent_image = gg.id; 

すべてがMAX(n.id)を除いて細かい戻っているWHERE句を無視し、カテゴリのトップIDを返します。 MAX(n.id)にWHERE句を含む結果セットの最大値を返すにはどうすればよいですか?ありがとう。

+0

「WHERE n.date_active

+0

サブクエリのSELECT句に 'MAX(n.date_active)as max_date'を含めます。それは 'NOW()'よりも大きなものを返しますか? –

+0

@PaulSpiegel - ありがとう。私はそうし、それはない。クエリが期待どおりに実行されているようです。私の悪い。 MAX(id)を使用することは決して理想的ではありませんdate_activeに基づいて最新のIDを返すクエリが必要です。これは必ずしもMAX(id)であるとは限りませんが、希望の結果を達成する方法については考えられませんでした。 –

答えて

0

インナーとしての仕事は助言者たちのおかげでそう状態

SELECT a.*, 
    gg.image as 'recent_image_file' 
FROM 

( SELECT c.cid, 
      c.category_name AS 'cat_name', 
      COUNT(g.id) AS image_count, 
      c.category_image AS 'images', 
      c.estgendpref, 
      MAX(n.id) as 'recent_image' 
    FROM tbl_category c 
    LEFT JOIN tbl_gallery_category g ON c.cid=g.cat_id 
    LEFT JOIN tbl_gallery n ON n.id=g.image_id and n.date_active < NOW() 
    GROUP BY c.cid 
    ORDER BY c.category_name ASC 
) a 

INNER JOIN tbl_gallery gg 
    ON a.recent_image = gg.id; 
0

に参加どこ適切かつ..を追加する句の中の条件は、そうでない場合、私はWHERE句が使用されていた見つけたあなたが使用する必要があります。しかし、MAX(id)はより低いIDがより大きな日付を持つ可能性があるため、本当に必要なものではありませんでした。以下は魅力的な作品です。

SELECT c.cid, 
      c.category_name AS 'cat_name', 
      COUNT(g.id) AS image_count, 
      c.category_image AS 'images', 
      c.estgendpref, 
      recent.id as 'recent_image', 
      recent.date_active, 
      recent.image as 'recent_image_file' 
    FROM tbl_category c 
    INNER JOIN tbl_gallery_category g 
     ON c.cid=g.cat_id 
    JOIN (SELECT * FROM tbl_gallery WHERE date_active <= CURDATE() ORDER BY date_active DESC, id DESC) recent 
     ON recent.id = g.image_id 

    GROUP BY c.cid 
    ORDER BY c.category_name ASC 
関連する問題