我敢肯定它不是可能的,但我想在這裏問問高手如果可以編寫一個SQL語句來SQL選擇Where子句聲明
Select * from ... Where [‘sent_to’]['bissness_id']=3516 .
如果是,那麼什麼是語法呢? (請參見下面的圖片)
我敢肯定它不是可能的,但我想在這裏問問高手如果可以編寫一個SQL語句來SQL選擇Where子句聲明
Select * from ... Where [‘sent_to’]['bissness_id']=3516 .
如果是,那麼什麼是語法呢? (請參見下面的圖片)
像這樣的工作:
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
眼簾列的一些看法。
另一個選擇是添加一個包含鏈接業務ID的新表,但使用觸發器來保持它填充。另外,如果你想維護一個噩夢,可以編寫一個mysql函數來檢查一個傳入的值是否在字符串中,通過分解函數內的字符串(我已經完成了這個存儲在db字段中的php序列化數組),但會建議反對它。 – Kickstart
這應該工作:
select * from web_query where sent_to like '%"business_ids":["3516"]%';
試試下面的代碼
SELECT * FROM TABLE_NAME t1
WHERE t1.sent_to.business_ids = 3516;
如果你只對你sent_to列businessIds你可以簡單地做:
Select * from ... Where sent_to LIKE '%"3516"%'
我不不要以爲你可以做什麼,但你可以用簡單的方法做到這一點
select * from yourtable where sent_to like '%5060%'
這將工作變得ü與商家ID行5060
ü可以選擇單獨的表如果u希望有更多的靈活性,按您的要求
沒有一個非常明確的問題..
如果你有,以滿足有是非「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%'
看來它複製http://stackoverflow.com/questions/5724845/query-json-inside-mysql-column – sneawo
爲什麼要存儲這些'Bissness_id'的同一行的每個query_id嗎?最後,創建一個帶有每個ID條目的新表「QueryBissnessss」。 –
@MahmoudGamal - 是的,我知道就是這樣,但一個在我之前工作的人以這種方式創造了這個結構。所以現在數據庫有這種格式的大量數據,所以我想避免改變表格結構。 – Yahoo