MySQL:如何拆分由管道和分号分隔的长文本

MySQL:如何拆分由管道和分号分隔的长文本,mysql,database,delimiter,string-split,Mysql,Database,Delimiter,String Split,我有一个字符串类型的列,我们在这个字段中保存了所有大小和价格。它由管道和分号分隔,如下所示 10;100|11;111|12;112|13;130|14;130|15;105 我想得到这个领域的最低价格(价格;尺寸,其中10是尺寸,1502是价格) 我使用了这个查询,但它只返回其中一个,而不是最小值 select SUBSTRING_INDEX((textColumn), '|', 1) as sizeAndprice from myTable; 如果结构可以改变,我建议这样做。 但是,如果

我有一个字符串类型的列,我们在这个字段中保存了所有大小和价格。它由管道和分号分隔,如下所示

10;100|11;111|12;112|13;130|14;130|15;105
我想得到这个领域的最低价格(价格;尺寸,其中10是尺寸,1502是价格)

我使用了这个查询,但它只返回其中一个,而不是最小值

select SUBSTRING_INDEX((textColumn), '|', 1) as sizeAndprice from myTable;

如果结构可以改变,我建议这样做。
但是,如果由于任何原因无法更改,我将按原样获取整行并使用explode()函数:

/* fetch the whole column as string in a variable ($myWholeText for this example) */
$mySplitColumns = explode ("|", $myWholeText );
然后,您将在一个单独的数组$mySplitColumns索引中包含所有拆分值(价格和大小),并且您可以根据需要对它们进行排序


有关explode函数的更多参考信息,请检查数据为何以这种方式存储?这是一个传统的东西,还是可以改变设计?以这种方式存储数据并不完全是最优的,这意味着很难像您目前所发现的那样轻松找到数据。我们这样做是为了最大限度地减少记录数量。您必须编写存储过程或在应用程序代码中使用逻辑,以获得此结构的最低价格。如果您看到,您可以看到如何将其拆分为两列。这可以扩展为多个,但我猜这没有一个固定的限制。正如@shadow所提到的,您需要在典型查询之外执行此操作。数据库并不是专门为这样使用而设计的。你假设OP可以使用PHP解决方案,而他建议他在MySQL中寻找一些东西。是的,我想要一个MySQL解决方案