2013-08-01 28 views
0

我有兩個表, ir1_police是包括消息,報告給管理員。 ir1_police_flag,admin可以標記1到2的記者。(1表示中2表示低意味着沒有意思是高優先級)。選擇兩個表,並把訂購優先

如果有人試圖報告不是真實的東西。管理員會將其標記爲1或2。 因此,我會列出一份報告,顯示第一個高優先級,第二個介質和最後低的報告。

我使用mysql語句,但有一個問題。如果沒有任何東西ir1_police_report什麼都不會顯示。或者如果只存在顯示他們在ir_police_flags

我不知道,如果在ir1_police_flags

SELECT * FROM ir1_police 
JOIN ir1_police_flags on ir1_police_flags.uid = `ir1_police.uid 
WHERE 
ir1_police.status=0 AND ir1_police.parent_id=0 
ORDER BY ir1_police.time DESC 
+0

'ORDER BY ir1_police_flags.flag ASC,irw_police.time DESC' – Mike

+0

問題是,如果ir1_police_flags上沒有任何內容,將不會顯示/但我需要顯示所有應顯示ir1_police的內容。另外,如果ir1_police_flags上顯示任何內容,請在等號用戶標識旁邊顯示 –

+0

除了@Mike註釋之外,如果不需要在ir1_police_flags中記錄最高優先級,請使用左連接 – Wirus

回答

0

不存在任何紀錄LEFT JOIN更換JOIN進行選擇。前者僅從發現匹配的表中選擇行,而後者從第一個表中選擇所有行,即使在另一個表中沒有匹配時也是如此。

然後你就可以在第二字段添加到ORDER BY

SELECT * FROM ir1_police 
LEFT JOIN ir1_police_flags ON ir1_police_flags.uid = ir1_police.uid 
WHERE ir1_police.status=0 AND ir1_police.parent_id=0 
ORDER BY 
    ir1_police_flags.flag ASC, 
    ir1_police.time DESC 

通知的LEFT JOIN產生的結果,所有ir1_police_flags的領域是NULL那裏是在這個表中沒有匹配。這在你的情況下是完美的,因爲NULL被認爲比任何值都小,就ORDER BY而言。


應用程序可能證明這種結構,但你應該問自己是否在該表ir1_police這個標誌不應該只是一個列完全。