MYSQL选择一个字符串并按该部分排序

时间:2011-06-25 04:57:57

标签: php mysql sql

我有一个字段有这种信息“web-1 / 1.,web-2 / 2.,web-3/3,web-4/4,web-5/5。”。其他寄存器可能有不同的值,如“web-1/4,web-2/5,web-3/1,web-4/2,web-5/3”。

我想选择和订购,让我们说web-2 /?将是web-2/1,web-2/2,web-2/3等所有包含web-2的字段和按最后一个数字排序

我想创建一个不同网站的精选属性脚本并指定功能号。不同的属性,不同的网站不同的顺序

4 个答案:

答案 0 :(得分:14)

我建议您查看MySQL String Functions,更具体地说是SUBSTRING_INDEX函数。我建议SUBSTRING以上的这个原因是因为斜杠之前或之后的数字可能超过一个数字,这会使第一和/或第二部分的长度发生变化。

示例:

SELECT   `info`,
         SUBSTRING_INDEX(`info`, '/', 1) AS `first_part`,
         SUBSTRING_INDEX(`info`, '/', -1) AS `second_part`
FROM     `table`
ORDER BY `first_part` ASC,
         `second_part` ASC;

<强>结果:

Result

附加示例

在这个例子中,我使用CAST将第二部分转换为无符号整数,以防万一它包含其他字符,如符号或字母。换句话说,“web-4/15”的第二部分。将是“15”,“web-4/15 ****”的第二部分也将是“15”。

SELECT   `info`,
          SUBSTRING_INDEX(`info`, '/', 1) AS `first_part`,
          CAST(SUBSTRING_INDEX(`info`, '/', -1) AS UNSIGNED) `second_part`
FROM     `table`
ORDER BY `first_part` ASC,
         `second_part` ASC;

答案 1 :(得分:0)

如果字符串总是与您描述的模式匹配,我们可以假设您要排序的第一个值是字符串中的索引位置5(左起5个字符)。第二个字符是索引7.考虑到这一点,您可以执行以下操作,假设字符串'web-2/1'位于名为field的字段中:

SELECT
  `field`
FROM
  `table`
ORDER BY
  substr(`field`, 5, 1) ASC,
  substr(`field`, 7, 1) ASC;

substr()函数将字段作为第一个选项,我们上面提到的索引,以及一个选项第三个参数,它是从第二个选项开始包含多少个字符的计数。

如果字符串稍微关闭,你可以根据需要调整它,主要是subtr()函数中的第二个选项。

答案 2 :(得分:0)

只需添加:...ORDER BY SUBSTRING(username, 2) ASC

答案 3 :(得分:-1)

我会这样做

SELECT info
FROM table
WHERE info LIKE 'web-2%'
ORDER BY info ASC