2012-07-30 20 views
2

假設我有一個表「Customers」,它具有一個TEXT列「preferences」,用於存儲YAML。 YAML是一個哈希/字典/地圖,其屬性如show_email,likes_to_partylast_changed_prefs_at。 MySQL有什麼方法可以將這個YAML數據查詢到返回所有有customers.preferences["likes_to_party"] == true的客戶?查詢MySQL中的YAML

問題就變得更復雜,不過,因爲我確實有我想知道它是否屬於某個日期間隔其中一個序列化的日期字段:customers.preferences["last_changed_prefs_at"].between(some_date, some_other_date) == true

我最初想的正則表達式..但是這是相當哈克。

+1

看看這個:http://sumanrs.wordpress.com/2012/02/23/yaml -to-mysql-yaml2sql-script-in-php/ – dnagirl 2012-07-30 11:49:38

+0

這是關於反序列化的PHP,而不是MySQL。 – skinkelynet 2012-07-30 11:51:57

+0

您能否澄清您的問題?看起來你想對包含YAML的文本字段進行SQL查詢,並讓SQL瞭解它。考慮到這個問題,我認爲將YAML轉換爲SQL並將其存儲用於查詢目的(以及將YAML存儲爲輸出目的)可能是一個好方法。 – dnagirl 2012-07-30 12:02:24

回答

2

通過使用SUBSTRING()LOCATE()UNIX_TIMESTAMP()我能夠構建一個相當醜陋的黑客:

UNIX_TIMESTAMP(
    SUBSTRING(customers.preferences, 
    LOCATE(\"last_changed_prefs_at\", cusstomers.preferences) + 22, 29) 
) BETWEEN UNIX_TIMESTAMP(:period_start) AND UNIX_TIMESTAMP(:period_end)