【问题标题】:MySQL right query left join latest uploaded image from images table, with paginationMySQL右查询左连接图像表中最新上传的图像,分页
【发布时间】:2013-04-09 21:16:26
【问题描述】:

我正在尝试从第一个表中选择少量数据,并且仅从图像表中选择最后上传的图像。我的表格如下所示:

名为 data_property 的表具有字段(列):

property_id、timestamp、label_town、label_sub、property_name、price_night、description(以及在这种情况下我不需要的其他内容)。

以及带有字段(列)的表格图像:

image_id、property_id 和分机。图片名称是image_id,ext是图片的扩展名。

每个属性(property_id 行)在图像表中有 12 个图像。我只需要加入每个属性的最后上传图像,并每页显示 10 个属性 ($recordsize = 10)。我不知道如何组织我的查询

类似这样的:

SELECT 
    property_id, timestamp, label_town, label_sub, 
    property_name, price_night, description 
FROM 
    data_property 
    LEFT JOIN or INNER JOIN (image_id, property_id, ext 
ORDER BY image_id DESC LIMIT 1) 
    FROM images ORDER BY timestamp DESC LIMIT $recordstart, $recordsize

所以,我需要从 data_property 中选择几个字段,加入属于该属性的最新上传的图像,按创建属性广告的时间排序,从 desc 排序并显示每页 10 个属性。

要在这个网站上获得类似的东西:http://www.freehouseagent.com/property-for-sale/ireland/

对不起,我的英语不好。我希望你能理解我。 谢谢和最好的问候!

【问题讨论】:

  • 所以每个属性都有 12 张图片,您想选择最后上传的一张吗?如果图像表中没有时间戳列,您如何知道每张图像何时上传?
  • 最后上传的图片id最大(image_id是自增整数) image_id也是图片的名字。用户可以删除图像并上传另一个图像。我在图像表中也有一个时间戳列,因此我也可以使用该解决方案。

标签: php mysql


【解决方案1】:

试试这个:

SELECT 
    p.property_id, p.timestamp, p.label_town, p.label_sub,  p.property_name,
    p.price_night, p.description, i.image_id, i.property_id, i.ext 
FROM 
    data_property as p
LEFT JOIN images as i
ON p.property_id = i.property_id
GROUP BY p.property_id
ORDER BY p.timestamp DESC
LIMIT 10

你也可以试试这个以获得更高的准确性:

SELECT 
    p.property_id, p.timestamp, p.label_town, p.label_sub,  p.property_name,
    p.price_night, p.description, i.image_id, i.property_id, i.ext 
FROM 
    data_property as p
LEFT JOIN (
            SELECT MAX(image_id) as max, property_id
            FROM
                images
            GROUP BY
                property_id
           ) as n
ON p.property_id = n.property_id
LEFT JOIN
  images as i
ON i.image_id = n.max AND i.property_id = n.property_id
ORDER BY p.property_id DESC
LIMIT 10

【讨论】:

  • 试试另一个更好
  • 如果我有条件选择仅属性 WHERE p.label_town = London 将那行代码放在哪里?
  • 就在ORDER BY p.property_id DESC之前
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 2012-08-08
  • 2013-09-02
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多