2017-02-15 139 views
0

我想在MySql中运行一个查询,以将包含斜杠(/)的params字符串(文本类型)的一部分替换为某些joomla项目菜单。在字符串中使用正斜杠(/)查询

例如:健身/运动是字符串的一部分,我需要改变,以健身&体育

在表中的字符串是Joomla是这样写的:

....... ...............

“PAGE_TITLE”: “维琴察健身/运动”,

................ ......

首先我试着选择ECT:

select id,params FROM mytable WHERE params LIKE '%Fitness/Sport%'; 

那我就直接替换

UPDATE mytable SET params = REPLACE(params,'Fitness/Sport','Fitness & Sport') WHERE alias ='fitness-sport'; 

但两者querys返回0的结果。

(I具有每每个别名139行containig ABC/XYZ)

作为@Vladimir展示查询与FOWARD斜线normaly工作,seaching仅为它

select id,params FROM mytable WHERE params LIKE '%/%'; 

查询工作精细,和工作,也没有斜线 搜索字符串(我不仅可以查询在盼着斜线,因为它会影响到其他PARAMS字符串)

我想不通,为什么不工作, 任何建议?

感谢的

+0

如果你给出一些真实的参数 – RiggsFolly

+1

的内容的例子,那么alias ='myalias''没有行吗? –

+0

感谢的答复 “PARAMS” 是一个Joomla菜单,在这里是一个简短的JSON rapresentation: \t “MENU_SHOW”:1, \t “MENU_TEXT”:1, \t “page_heading”: “阿布鲁佐”, \t“ PAGE_TITLE”: “阿布鲁佐健身/运动”, \t “pageclass_sfx”: “阿布鲁佐健身运动”, \t “机器人”: “”, 只为 “myalias” 的查询返回,139行 – Znort

回答

0

后来我弄清楚什么是错的查询;

我不是为什么,但似乎前斜线(/)与反斜杠一起写入表中并成为(/),所以我试图摆脱反斜线并完美地工作。

正确的查询是:

UPDATE mytable SET params = REPLACE(params,'Fitness\\/Sport','Fitness & Sport') WHERE alias ='fitness-sport' 

注意的转义双反斜线。

0
select REPLACE('string abc/xyz', 'abc/xyz','abc & xyz'); 
+--------------------------------------------------+ 
| REPLACE('string abc/xyz', 'abc/xyz','abc & xyz') | 
+--------------------------------------------------+ 
| string abc & xyz         | 
+--------------------------------------------------+ 

这意味着替代条款的作品完美,但如果收到0它意味着你不必行机智params LIKE '%abc/xyz%' AND alias ='myalias',第一次查询说,正是这一点。

这里我简单的例子:

cli [db]> create table simpleTest (id int key, params varchar(50)); 
Query OK, 0 rows affected (0.00 sec) 

cli [db]> insert into simpleTest values 
    -> (1, 'params test abc/xyz 1'), 
    -> (2, 'params test abc/xyz 2'), 
    -> (3, 'params test abc/xyz 3'); 
Query OK, 3 rows affected (0.01 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

cli [db]> select * from simpleTest; 
+----+-----------------------+ 
| id | params    | 
+----+-----------------------+ 
| 1 | params test abc/xyz 1 | 
| 2 | params test abc/xyz 2 | 
| 3 | params test abc/xyz 3 | 
+----+-----------------------+ 
3 rows in set (0.00 sec) 

cli [db]> update simpleTest set params = replace(params, 'abc/xyz', 'abc & xyz'); 
Query OK, 3 rows affected (0.00 sec) 
Rows matched: 3 Changed: 3 Warnings: 0 

cli [db]> select * from simpleTest; 
+----+-------------------------+ 
| id | params     | 
+----+-------------------------+ 
| 1 | params test abc & xyz 1 | 
| 2 | params test abc & xyz 2 | 
| 3 | params test abc & xyz 3 | 
+----+-------------------------+ 
3 rows in set (0.00 sec) 

和它的作品对我来说...

+0

由于搜索@弗拉基米尔,但 1 - 我知道我有139行包含字符串“abc/xyz”为具体的别名(myalias) 2 - 只搜索参数“abc”或“xyz”,结果为139行 3-仅搜索别名“myalias”结果为139行 4-仅搜索“abc/xyz”结果为0行 我认为前倾斜(/)正在给我带来一些我不认识的麻烦。 – Znort

+0

@Znort我提供了一些例子...不确定它会帮助你,但我只是试图重现你的问题... –

+0

感谢@Vladimir努力尝试和+1来证明正常的斜线不会影响查询。为了更加清晰,我编辑了我的问题。 – Znort