mysql - 按序列化字符串中的值排序

标签 mysql

我有一个数据库,其中包含如下序列化字符串:

[gundealer|0
mayor|0
umlf|0
sbgfboss|0
ems|0
trader|0
thief|0
cp|0
umflboss|0
guard|0
sbgf|0
]

有没有可能的方法来进行查询以按此序列化字符串的子项目进行排序?

最佳答案

她用演示的方式来做到这一点:-

SELECT SerializeTest.*
FROM SerializeTest 
INNER JOIN (SELECT SerializeTest.Id, SUBSTRING_INDEX( SUBSTRING_INDEX( SUBSTRING( SomeField, 2, LENGTH( SomeField ) -2 ) , '|', anInt +1 ) , '|', -1 ) AS SortValue
FROM SerializeTest, 
(SELECT a.i+b.i*10 AS anInt FROM integers a, integers b) Sub1
WHERE MOD(anInt, 2) =1
AND anInt <=  (LENGTH(SomeField) - LENGTH(REPLACE(SomeField,'|', '' )))
AND SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING(SomeField,2, LENGTH(SomeField) -2), '|', anInt), '|', -1) = 'ems') Sub2
ON SerializeTest.Id = Sub2.Id
ORDER BY SortValue

这依赖于一个名为“integers”的表,该表有一个名为 i 的单列和 10 行,其值从 0 到 9。该表与其自身连接以获得一定范围的整数(您可以轻松扩展此部分以获得更大范围的整数)数字取决于序列化数组中值的最大数量)。

该整数用于查找 |分隔值的值,并从中提取键值后面的值。注意我假设每个值之间有另一个管道。即,您的数据将类似于:-

INSERT INTO `SerializeTest` (`Id`, `SomeField`) VALUES
(1, '[gundealer|1|mayor|0|umlf|3|sbgfboss|0|ems|5|trader|0|thief|0|cp|0|umflboss|0|guard|0|sbgf|0]'),
(2, '[gundealer|1|mayor|0|umlf|3|sbgfboss|0|ems|9|trader|0|thief|0|cp|0|umflboss|0|guard|0|sbgf|0]'),
(3, '[gundealer|1|mayor|0|umlf|3|sbgfboss|0|ems|8|trader|0|thief|0|cp|0|umflboss|0|guard|0|sbgf|0]');

请注意,我真的不建议您在实时环境中使用它。不仅因为我怀疑性能会迅速下降,而且因为它并不容易理解

关于mysql - 按序列化字符串中的值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15901643/

相关文章:

MySQL - SELECT 某些内容 IF(某些内容为 true)

mysql - 无法在sql的Case语句中添加as关键字

MySQL Workbench 插入语句不起作用

php - 使用 php 进行多条件搜索

php - 在传递到查询的字符串中查找匹配的 MySQL 字段

php - 使用来自多个表的信息输入新的/编辑现有的数据库记录

java - 无法通过 servlet 连接 mysql;访问被拒绝

java - Android : How to Convert a Java. 字符串转换为 JSONObject

php - For循环检索相同的mysql行

如果语法错误,MySQL 触发器结束