Mysql转换整型文本字段子字符串字符限制

Mysql转换整型文本字段子字符串字符限制,mysql,integer,Mysql,Integer,我有一个简单的数据库,有一个表和许多字段,其中一个是文本字段,总是有相同的alpha前缀,后跟一个3个字符的播放器名称,然后是一个数字,范围从1到100 文本记录如下所示,是从第三方应用程序生成的.txt文件加载本地infle命令的结果 总冠军 MAC 1180611620 顶级垂钓者 1 MAC 963956660 2 MAC 777545450 3 MAC 774563200 4 MAC 659721170 最大的骗子 DVA 6鱼4故事 顶船摇杆 雨衣 24艘岩石船 使用PHP,我试图将D

我有一个简单的数据库,有一个表和许多字段,其中一个是文本字段,总是有相同的alpha前缀,后跟一个3个字符的播放器名称,然后是一个数字,范围从1到100

文本记录如下所示,是从第三方应用程序生成的.txt文件加载本地infle命令的结果

总冠军 MAC 1180611620

顶级垂钓者 1 MAC 963956660 2 MAC 777545450 3 MAC 774563200 4 MAC 659721170

最大的骗子 DVA 6鱼4故事

顶船摇杆 雨衣 24艘岩石船

使用PHP,我试图将DVA后面的数值转换为整数,并将其从最大值到最小值排序。我的PHP代码仅显示从最大说谎者到4个故事的块,如下所示

$data = mysql_query("SELECT * FROM stats WHERE tablestats LIKE '%biggest liar%' ORDER BY CONVERT(SUBSTRING(tablestats, LOCATE('LIAR', tablestats) +5), SIGNED INTEGER),tablestats DESC LIMIT 5;")

or die(mysql_error()); 
while($info = mysql_fetch_array( $data )) 
{ 
echo substr($info['tablestats'],151,40);
Print "<br>";
} 
?>
这将生成一个包含我要查找的文本的页面,最终呈现为

最大的骗子DVA 6鱼4故事

但是,对于3个字符用户名后面的变量发生更改的多个记录,使用DESC排序似乎无法正常工作。我注意到,当数字是1到9的单数时,这似乎是可以的,但如果值大于10,那么一个记录为6,另一个记录为10的实例将导致在10之前列出6

我在这里要做的是在3个字符的用户名后的一个空格后指定数值,考虑到这里的数字可能是1到100,然后将其转换为整数和顺序

任何帮助都将不胜感激


托尼。

我想你可能会考虑使用这样的东西:

SELECT *, 
  CONVERT(
     SUBSTRING(tablestats, 
               LOCATE('LIAR ', tablestats) + LENGTH('LIAR ') + 4), 
     SIGNED INTEGER)
FROM stats 
WHERE tablestats LIKE '%biggest liar%' 
ORDER BY 2 DESC
使用您的搜索字符串,在本例中为“说谎者”,并在每个语句中添加4个字符-字符名称始终为3个字符。如果不正确,可以再次使用“定位”查找下一个空间


顺便说一句,像这样使用CONVERT方法在其他RDBMS中不起作用。MySQL转换它找到的数值,直到第一个非数值。因此,在转换之前不必删除字符串的其余部分。

关键问题是数据未标准化。你能正常化数据库吗?我可以尝试清理一下,但这是导入的结果,事实上是第三方应用程序正在创建它。在…之前转换数据。。。或者在。。。它击中了你的数据库。Python做得很好。非常感谢你的回复。如果在varchar字段中只有block最大的说谎者DVA 633 FISH 4 TALES多个3位数的值,这似乎很好。如果我在原始示例中包含整个文本字段,它似乎不会将4个字符后的值转换为整数。我会继续试验。