2011-03-22 72 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)

让我知道这是如何工作的。