2013-06-13 33 views
-4

大家好日子,如何显示PHP MySQL中的最新记录?

我是一个新手PHP程序员,我想问一下如何能够在我的PHP MySQL程序中显示最新记录的帮助或任何想法。

目标:

只显示与主表的最新版本的记录。例如,

################################# 
id  filename revision 
1  math12  1 
2  math12  2 
3  science43 1 
4  science43 2 
5  science43 3 
3  logic13  1 
4  logic13  2 
5  logic13  3 
################################# 

当我获取所有的纪录,我的目标只有与最新版本将显示记录。

################################# 
id  filename revision 
2  math12  2 
5  science43 3 
5  logic13  3 
################################# 

这样的..

你能帮助我与我的问题..

非常感谢..

似乎什么是在这段代码的问题?

SELECT 
           imaster_tbl.id, 
           imaster_tbl.die_name, 
           imaster_tbl.part_name, 
           imaster_tbl.drawing_number, 
           imaster_tbl.drawing_part_number, 
           imaster_tbl.sub_letter, 
           imaster_tbl.specs, 
           imaster_tbl.file_path, 
           idrawing_type_tbl.drawing_type, 
           idie_type_tbl.die_type, 
           irevision_tbl.revision, 
           irelay_type_tbl.relay_type FROM imaster_tbl 
           LEFT JOIN idrawing_type_tbl ON imaster_tbl.drawing_type_id = idrawing_type_tbl.drawing_type_id 
           LEFT JOIN idie_type_tbl ON imaster_tbl.die_type_id = idie_type_tbl.die_type_id 
           LEFT JOIN irelay_type_tbl ON imaster_tbl.relay_type_id = irelay_type_tbl.relay_type_id 
           LEFT JOIN irevision_tbl ON imaster_tbl.revision_id = irevision_tbl.revision_id 
           WHERE revision = (SELECT MAX(revision) FROM imaster_tbl WHERE drawing_part_number = drawing_part_number) 

-Martin

+3

这个问题不显示任何研究工作。 **做你的作业很重要**。告诉我们你发现了什么,***为什么它不符合你的需求。这表明你已经花时间去尝试帮助你自己了,它使我们避免重申明显的答案,最重要的是它可以帮助你得到更具体和相关的答案。 [FAQ](http://stackoverflow.com/questions/how-to-ask)。 –

+0

另外,请花点时间先搜索档案。例如,如果你在['[mysql]获取最新记录'](http://stackoverflow.com/search?q= [mysql] + get + latest + record)上搜索,则存在一堆现有线程那回答这个问题。 – Leigh

回答

0

有使用子查询写这个查询的许多等效方法,这里就是其中之一:

select * from table t1 where revision = (select max(revision) from table t2 where t2.filename = t1.filename)

你也可以使用ANY写,ALLEXISTSNOT EXISTS运营商,如果你喜欢做不同的事情。

+0

感谢很多Patashu为您的快速反应..我会尝试它,并会稍后给你反馈..再次感谢.. :) – ChocoMartin

+0

Patashu我已经尝试过你的想法,但它只显示最大修订。在我的情况下,它只显示所有最高版本的记录,无视所有记录,只有修订版2是最新的。 – ChocoMartin

+0

@ChocoMartin如果你的意思是'它只显示带有版本3的行,这是表中最大的行',你还没有实现我在我的答案中写过的同样的查询。请注意,我使用依赖子查询,例如它只考虑与当前正在考虑的外部查询相同的文件名的行的最大修订版本。因此,对于最大修订版本为2的文件名,它将找到2,如果它是3 3等。 – Patashu

0

首先建立与关键和最大改版子查询,然后再加入它来获得记录的其余部分:

SELECT 
    tablename.* 
FROM 
    tablename 
    INNER JOIN (
    SELECT 
     filename, MAX(revision) AS max_revision 
    FROM 
     tablename 
    GROUP BY 
     filename 
) AS max_revisions 
    ON tablename.filename = max_revisions.tablename 
    AND tablename.revision = max_revisions.max_revision 
+0

感谢您的回复,但我总是收到此错误消息“#1054 - 'on clause'中的未知列'max_revision.version'” – ChocoMartin

+0

我只有使用1表先生..表名称:版本 – ChocoMartin

-1

只是一个简单和干净的解决方案

SELECT * FROM table WHERE id!='' ORDER BY revision DESC LIMIT 0,3 
+0

那*不*返回正确的结果。 – Leigh