MYSQL выбирает часть строки и порядок этой части

У меня есть поле с такой информацией "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 и т.д. во все поля, содержащие веб-2 и порядок по последнему номеру

Я хочу создать признанные свойства script разных сайтов и указать номер функции. Различные свойства, разные веб-сайты различного порядка

Ответ 1

Я бы предположил, что вы смотрите на строковые функции MySQL и, более конкретно, 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;

Ответ 2

Если строки всегда будут соответствовать шаблону, который вы описали, мы можем предположить, что первое значение, которое вы хотите отсортировать, - это позиция индекса 5 в строке (5 символов слева). Второй символ - это индекс 7. Имея это в виду, вы можете сделать следующее, считая, что строка "web-2/1" находится в поле с именем:

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

Функции substr() принимают поле в качестве первого параметра, упомянутого выше индекса и третьего параметра параметра, который является количеством для количества символов, которое должно включать начало второго варианта.

Вы можете настроить это, если необходимо, если строка немного выключена, а главное - второй вариант в функции subtr().

Ответ 3

Просто добавьте: ...ORDER BY SUBSTRING(username, 2) ASC

Ответ 4

Я бы сделал это

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