2011-10-27 63 views
0

我有以下MySQL查詢:複雜MySQL的加入

SELECT Project.*, `trk_deleted`, `trk_status`, `trk_state` 
    FROM `project` AS `Project` LEFT JOIN `trackline` ON `prj_id` = `trk_project` 
    WHERE `prj_deleted` = '0' GROUP BY `prj_id` ORDER BY `prj_name`; 

這是一個有點難以解釋,但基本上,我在我的數據庫中的結構,其中項目有多個Tracklines。這兩個實體分別具有prj_deletedtrk_deleted的字段,如果它們被刪除(從視圖中隱藏),則它們可以具有1值,或者0值不被刪除(仍在視圖中)。

我的項目視圖頁面根據該項目中的軌跡線顯示每個項目的圖標。這些圖標是基於trk_status值並顯示trk_state

我的項目視圖頁面應該只顯示項目1時,即使它有多個tracklines(因此GROUP BY prj_id

我的問題:

從上GROUP MySQL文檔BY:

「。此外,值從每個組選擇不能被插件的影響g ORDER BY子句。結果集的排序發生在選擇了值之後,並且ORDER BY不會影響服務器選擇的值。「

我的項目視圖頁面應該理想地顯示未被刪除的軌跡線的圖標。所以,我希望我可以在GROUP BY之前ORDER BY trk_deleted發生,這樣的分組是與不是刪除的trackline完成。

希望有人能明白我試圖讓在這裏。

+0

如果一個項目可以有多個當前'trk_status'和'trk_state',這是一個數據完整性問題,數據中可能存在異常。每個項目是否只有一條「trackline」(其餘部分保存用於存儲目的)?一個項目有兩條軌跡線和兩個「trk_status」是否有效意味着什麼? –

回答

0

如果你可以提供一些樣本數據和你想要的迴應,我可能會幫助更好的查詢。平均時間:

SELECT Project.*, MAX(`trk_deleted`), MAX(`trk_status`), MAX(`trk_state`) 
FROM `project` AS `Project` 
LEFT JOIN `trackline` ON `prj_id` = `trk_project` AND trk_deleted = '0' 
WHERE `prj_deleted` = '0' 
GROUP BY `prj_id` ORDER BY `prj_name`; 
+0

加入第二個條件trk_deleted ='0'做了訣竅。謝謝! – Justin

0

如果我有你的權利,你想獲得未刪除的所有項目,有tracklines與否,並沒有被刪除的tracklines。但添加trk_delete = 0會排除沒有軌跡線的項目。

我不是很熟悉MySQL的,但我認爲,你想要的是IS NULL

SELECT 
    Project.*, 
    `trk_deleted`, 
    `trk_status`, 
    `trk_state` 
FROM 
    `project` AS `Project` 
LEFT JOIN 
    `trackline` ON `prj_id` = `trk_project` 
WHERE 
    `prj_deleted` = '0' 
    AND trk_deleted = '0' OR trk_deleted IS NULL 
GROUP BY 
    `prj_id` 
ORDER BY 
    `prj_name` 

如果不是的話,請澄清自己