2012-02-21 4 views
0

の特定の部分を包む、いくつかのJSONエンコードされたデータを持っているのparams行があります - など:MySQLの構文を交換してください - テーブル内のテキスト

{"categories":211,"singleCatOrdering":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","menu_text":1,"page_title":"","show_page_heading":0,"page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0} 

私がする必要がどのような周り[]をラップされますcategoriesパラメータ - など見て:

{"categories":[211],"singleCatOrdering":"","menu-anchor_title":"","menu-anchor_css":"","menu_image":"","menu_text":1,"page_title":"","show_page_heading":0,"page_heading":"","pageclass_sfx":"","menu-meta_description":"","menu-meta_keywords":"","robots":"","secure":0} 

私は次のことを試してみました(および他の障害が発生したものの束)無サイコロとしている:

UPDATE j17_menu SET params = REPLACE(params,'"categories":%,','"categories":[%],') WHERE component_id = 10021; 

ワイルドカードオプションを間違って使用していますか?正しい方向への動きは大きな助けになるでしょう。ありがとう!

+1

から独立して動作しますが、「singleCatOrdering」いつも二番目のパラメータですか?そうであれば、最初の角括弧のためのものと最後のもののためのものとの2つの置換えを使用してください。 – Jrod

+0

ありがとう - 完璧に働いた! – Zach

答えて

1

この1つは、コンテキスト

UPDATE j17_menu 
SET params=CONCAT (
    SUBSTR(params,1,LOCATE('"categories":',params)), 
    '"categories":[', 
    substr(
     params, 
     LOCATE('"categories":',params)+13, 
     LOCATE(',',params,LOCATE('"categories":',params))-LOCATE('"categories":',params)-13 
    ), 
    ']', 
    substr(params,LOCATE(',',params,LOCATE('"categories":',params))) 
) 
WHERE component_id = 10021; 
関連する問題