這篇文章很遺憾,但問題也很複雜。mysql根據條件切換到備用表
使用MySQL和PHP,
我可以解決我的問題有3個SQL請求,但沒有1例,也不在2
所以這就是爲什麼我張貼在這裏:
沒有任何的你知道一種方法在少於三招的情況下做到這一點?
(對不起,我的英語)
首先讓我解釋的背景:
它是關於主題公園!
所以有主題公園業主
和他擁有一個不同區域的主題公園,每個區域包含遊戲。
根據遊戲經理(負責遊戲的人),每個遊戲都可以設置不同的設置。
下面是模式的有趣的部分是什麼樣子
有5桌
themeparkzone
--name(VARCHAR)
themeparkzone_has_game_with_manager
--themeparkzone_id(PK)
- -game_id(pk)
--manager_id(fk)
--game_settings(text)
themeparkzone_has_game
--themeparkzone_id(PK)
--game_id(PK)
--game_settings(文本)
遊戲
--name(VARCHAR)
經理
- 名稱(varchar)
兩個表格可能需要更多解釋:
themeparkzone_has_game_with_manager and themeparkzone_has_game。
如果主題樂園所有者 寫道他們,themeparkzone_has_game可能會保留遊戲的默認設置。
然後themeparkzone_has_game_with_manager認爲,game_manager有遊戲設置(或還沒有)的設置,
並設置時,這些設置應該從themeparkzone_has_game表覆蓋默認設置。
因爲主題公園主人希望他的主題公園是非常有吸引力的,他計劃每天更改設置,
這裏是他和他的團隊將要處理的約定:
決定哪些遊戲設置將適用,
我們下面瓦爾在啓動中給定:
- 的MANAGER_ID:例如22
- 在themeparkzone IDS今天,例如12,13,14
所以最終的目標是:
對於給定的經理標識,而對於給定的themeparkzone_ids,
找出名稱和遊戲的設置,
因爲:
如果設置在themeparkzone_has_game_with_manager設置它將應用
其他
如果設置在themeparkzone_has_game設置將適用
其他
沒有遊戲。
這是我有問題,
因爲我could'nt 1個請求中做到這一點,
我花了第一個請求循環的themeparkzone_ids,
讓現在的問題是要找到遊戲的名稱,給定manager_id和給定themeparkzone_id的設置。
在這一點上,我可以在兩個請求中做到這一點,但我想知道是否可以在一個請求中做到這一點。
我的要求是:
SELECT g.name,w.game_settings
從博弈摹
INNER JOIN themeparkzone_has_game_with_manager W於w.game_id = g.id
WHERE w.manager_id = 22
AND w.themeparkzone_id在(12,13,14)
和
SELECT g.name,h.game_settings
FROM遊戲克
INNER JOIN themeparkzone_has_game H於h.game_id = g.id
WHERE h.themeparkzone_id中(12,13,14)
其中FOREACH,我把所得到的陣列中的PHP數組和然後根據慣例將它們混合 。
所以我想知道是否有一種方法可以解決mysql請求 中的條件,而不是使用php來完成。
會做這樣的事情的請求:
的foreach(themeparkzone_id和經理標識)
如果存在匹配的themeparkzone_has_game_with_manager
takeit設置,
否則
如果存在匹配的themeparkzone_has_game
takeit設置,
其他
服裝。
希望有人能夠理解我試圖解釋的內容。
是否有真正令人信服的理由在mySQL而不是PHP中執行此操作?你有任何性能問題?我很難想象這是值得嘗試進入mySQL的努力 - 使它成爲一個查詢條件,不管表是否存在與我的mySQL精神不同步。 – 2010-08-28 10:59:05