2011-03-22 15 views
0

我試圖創建一個MYSQL查詢來選擇圖像數量大於0的最新10個廣告記錄。問題是我得到錯誤「Unknown column'num_photos'在where子句中「,因爲where語句在count之前被執行。我將如何重寫這個MySQL查詢來解決這個問題?在MYSQL的where子句中使用計數圖像

 
SELECT adverts.*, 
(SELECT advert_images.imagethumbpath FROM advert_images WHERE advert_images.advert_id = adverts.advert_id ORDER BY image_id ASC LIMIT 1) as imagethumbpath, 
(SELECT count(advert_images.advert_id) from advert_images WHERE advert_images.advert_id = adverts.advert_id) AS num_photos 
FROM adverts 
WHERE num_photos > 0 
ORDER BY date_updated DESC 
LIMIT 10 

回答

0

你必須使用having子句,而不是在那裏

having num_photos > 0 
1

爲此,可以使用HAVING代替WHERE做:

SELECT adverts.*, 
(SELECT advert_images.imagethumbpath FROM advert_images WHERE advert_images.advert_id = adverts.advert_id ORDER BY image_id ASC LIMIT 1) as imagethumbpath, 
(SELECT count(advert_images.advert_id) from advert_images WHERE advert_images.advert_id = adverts.advert_id) AS num_photos 
FROM adverts 
HAVING num_photos > 0 
ORDER BY date_updated DESC 
LIMIT 10 
0

如果大多數廣告中有圖片,這應該相當快。

select a.advert_id 
     ,a.date_updated 
     ,b.imagethumbpath 
    from adverts  a 
    join advert_images b on(a.advert_id = b.advert_id) 
where b.image_id = 
     (select min(c.image_id) 
      from advert_image c 
      where c.advert_id = b.advert_id) 
order 
    by date_updated desc 
limit 10; 

您應該指數adverts(date_updated)advert_images(advert_id, image_id)

讓我知道這是如何工作的。