2013-06-13 71 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