【问题标题】:MySQL: How to split a long text separated by pipeline and semicolonMySQL:如何拆分由管道和分号分隔的长文本
【发布时间】:2015-12-14 16:20:07
【问题描述】:

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

10;100|11;111|12;112|13;130|14;130|15;105

我想获取该字段的最低价格(价格;尺寸,其中 10 是尺寸,1502 是价格)。

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

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

【问题讨论】:

  • 为什么数据会这样存储?它是遗留的东西,还是可以改变设计?以这种方式存储数据并不完全是最佳选择,这意味着更难像您目前所发现的那样轻松找到数据。
  • 我们这样做是为了尽量减少记录数
  • 您必须在应用程序代码中编写存储过程或使用逻辑才能从该结构中获得最低价格。
  • 如果您查看stackoverflow.com/questions/2696884/…,您会看到拆分成两列是如何完成的。这可以扩展为多个,但我猜这没有设定限制。正如@shadow 所提到的,您需要在典型查询之外执行此操作。数据库并不是真的被设计成这样使用的。

标签: mysql database delimiter string-split


【解决方案1】:

如果结构可以改变,我建议这样做。
但是,如果无论什么原因都无法更改它,我会按原样获取整行并使用 explode() 函数:

/* fetch the whole column as string in a variable ($myWholeText for this example) */
$mySplitColumns = explode ("|", $myWholeText );

然后,您将在数组 $mySplitColumns 的单独索引中拥有所有拆分值(价格和大小),并且您可以随意对它们进行排序。

更多关于爆炸功能的参考,请查看this link

【讨论】:

  • 您假设 OP 可以使用 PHP 中的解决方案,而他有点暗示他正在寻找 MySQL 中的东西。
  • 是的,我想要一个 MySQL 解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多