2013-05-05 85 views
-1

我有以下的子查詢...遍歷一個MySQL子查詢

SELECT column_name FROM information_schema.columns 
WHERE table_schema = 'table' AND table_name = 'some_table_name' 
AND column_name LIKE 'list_type_%' 

...我用它來選擇與LIST_TYPE開頭的所有列名。該值可以是白色或黑色(白名單,黑名單),但在某些情況下應該默認爲黑色(但不是所有情況下 - 因爲我希望默認值爲空 - 因此將DEFAULT值設置爲黑色不是選項) 。

在這樣一個「特定的情況下,」我想遍歷子查詢的結果,因爲如果我這樣做(僞代碼)

foreach (result as column_name) { 
if (column_name == x) { 
    values .= ", white" 
} 
else { 
    values .= ", black" 
} 
} 

我會再使用的列名和一個連接字符串,其值插入一行。有沒有辦法在SQL(Mysql)中做這樣的事情?

或者,我可以簡單地調用PHP PDO查詢方法兩次,並在兩者之間進行一些字符串轉換,但我想這會變慢。

+1

這聽起來像是一個真正可怕的想法。你試圖解決的更廣泛的問題是什麼? – eggyal 2013-05-05 17:53:45

+0

我希望能夠動態添加新的列名(以「list_type_」開頭),而不必隨處修改PHP代碼,這就是爲什麼我要從information_schema中選擇列名稱的原因 – user2180613 2013-05-05 17:56:10

+2

您需要將所有這些列表類型存儲在一個**單獨的表**,其中一列是列表類型,另一列是值 – 2013-05-05 17:57:18

回答

1

解決方案不是動態添加列,而是更改數據庫結構。這是一個稱爲規範化的過程,在構建完全不可維護的東西之前,您應該先學習它。

這裏有一個首發:http://en.wikipedia.org/wiki/Database_normalization

在你的情況,你想擁有列表類型的列在某些表中的一些任意數量。你真的想有什麼是具有或多或少以下列

  • item_key
  • list_type_key表

你會想一個爲每種類型的列表一行另一個表。這個表格可以隨時間增長。添加行比列更容易。這是行的目的。無論何時添加新的列表類型,都需要在此列表類型表中添加一個新條目。然後,在另一個表中,您可以開始將實體與列表類型關聯起來。

如果您可以給我更多關於您的總體架構的信息,我可以在我的指導下更具體。