2014-11-16 25 views
1

我在mysql数据库三个表选择最新记录,标题,描述,客房,价格更新]从多个表

土地 [ID,节,标题,描述,面积,价格,更新]

我需要从一个查询(id,title)这些表中的所有记录中检索四条最新记录,并且我不知道如何正确编写查询。我试过这个:

SELECT         
     flats.id, flats.title, houses.id, houses.title, lands.id, lands.title 
    FROM 
     flats, houses, lands 
    ORDER BY 
     updated DESC 
    LIMIT 
     3 

感谢您的回复。

+0

请澄清 - 你要4个记录_in total_,或4条从每个三个表? –

+0

感谢您的回复。我想要4条记录。 – Mato

回答

3

可以使用union all运营商“CONCAT”的结果,然后用limit子句,以获得前四名:

SELECT id, title 
FROM (SELECT id, title, updated FROM flats 
     UNION ALL 
     SELECT id, title, updated FROM houses 
     UNION ALL 
     SELECT id, title, updated FROM lands) t 
ORDER BY updated DESC 
LIMIT 4 

编辑:
正如评论所指出的迈克尔和约翰,子查询是多余的:

SELECT id, title, updated FROM flats 
UNION ALL 
SELECT id, title, updated FROM houses 
UNION ALL 
SELECT id, title, updated FROM lands 
ORDER BY updated DESC 
LIMIT 4 
+0

子查询不应该是必需的。 'ORDER BY/LIMIT'将应用于整个'UNION'。 –

+0

只需删除第一个选择..联盟语法允许排序和限制:) –

+0

感谢兄弟,它的工作:) – Mato

1
SELECT         
    flats.id, flats.title, houses.id, houses.title, lands.id, lands.title 
FROM 
    flats 
CROSS JOIN houses 
CROSS JOIN lands 
ORDER BY 
    updated DESC 
LIMIT 
    3 

但是,这不是很好的战术:DI猜,如果你shuld做这样的事情

0

在MySQL中最常用的方法是使用UNION声明。

所以,你的情况:

(SELECT id,title from flats ORDER BY updated DESC LIMIT 4) UNION (SELECT id,title from houses ORDER BY updated DESC LIMIT 4) UNION (SELECT id,title from lands ORDER BY updated DESC LIMIT 4);

更多信息http://dev.mysql.com/doc/refman/5.7/en/union.html