2013-02-07 78 views
2

我敢肯定它不是可能的,但我想在這裏問問高手如果可以編寫一個SQL語句來SQL選擇Where子句聲明

Select * from ... Where [‘sent_to’]['bissness_id']=3516 . 

如果是,那麼什麼是語法呢? (請參見下面的圖片)

Select * from ... Where sent_to['bissness_id']=3516

+0

看來它複製http://stackoverflow.com/questions/5724845/query-json-inside-mysql-column – sneawo

+0

爲什麼要存儲這些'Bissness_id'的同一行的每個query_id嗎?最後,創建一個帶有每個ID條目的新表「QueryBissnessss」。 –

+0

@MahmoudGamal - 是的,我知道就是這樣,但一個在我之前工作的人以這種方式創造了這個結構。所以現在數據庫有這種格式的大量數據,所以我想避免改變表格結構。 – Yahoo

回答

1

像這樣的工作:

select * from web_query where sent_to like '%"business_ids":["3516"]%'; 

,或者:

select * from web_query where sent_to like '%"business_ids":[%"3516"%]%'; 

但你真的不應該存儲JSON作爲數據庫列中的字符串值。它有點在幾個層面上打敗了數據庫的目的。

編輯:如果你想避免改變表結構,但仍希望從對數據庫的佈局結構改善中獲益,你可以看看寫會解析sent_to眼簾列的一些看法。

+1

另一個選擇是添加一個包含鏈接業務ID的新表,但使用觸發器來保持它填充。另外,如果你想維護一個噩夢,可以編寫一個mysql函數來檢查一個傳入的值是否在字符串中,通過分解函數內的字符串(我已經完成了這個存儲在db字段中的php序列化數組),但會建議反對它。 – Kickstart

0

這應該工作:

select * from web_query where sent_to like '%"business_ids":["3516"]%'; 
0

試試下面的代碼

SELECT * FROM TABLE_NAME t1 
WHERE t1.sent_to.business_ids = 3516; 
0

如果你只對你sent_to列businessIds你可以簡單地做:

Select * from ... Where sent_to LIKE '%"3516"%' 
0

我不不要以爲你可以做什麼,但你可以用簡單的方法做到這一點

select * from yourtable where sent_to like '%5060%' 

這將工作變得ü與商家ID行5060

ü可以選擇單獨的表如果u希望有更多的靈活性,按您的要求

0

沒有一個非常明確的問題..

如果你有,以滿足有是非「bissness_id」的東西,在sent_to那麼你需要明確:

DECLARE @FilterID Varchar(10) = '"3516"' 
Select * from ... Where sent_to LIKE '%'[email protected]+'%' 
       AND sent_to LIKE '%business_ids%' 

如果列只有「bissness_id」,那麼它更簡單

DECLARE @FilterID Varchar(10) = '"3516"' 
Select * from ... Where sent_to LIKE '%'[email protected]+'%' 

因爲在你的榜樣,你對where子句的整數。如果這是故意的,這個問題的一部分,那麼你可以使用轉換:

DECLARE @FilterInt Int = 3516 
DECLARE @FilterID Varchar(10) = '"' + CAST(3516 AS Varchar(10)) + '"' 
Select * from ... Where sent_to LIKE '%'[email protected]+'%' 
       AND sent_to LIKE '%business_ids%'