Как отсортировать таблицу MySQL по полю, имеющему несколько значений

0

Я застрял с таблицей MySQL, созданной другим разработчиком. Его праздничный круизный стол с полями, такими как места назначения, корабли и даты парусного спорта (среди других полей).

Destinations   Ships      Sailing Dates

Antarctica     MS QE2     2 Dec 2018, 1 Jan 2019

Antarctica     MS TBS     2 Feb 2019, 3 Mar 2019

Antarctica     MS JRB     9 Nov 2018, 5 Dec 2018

Как указано, каждое судно может иметь несколько парусных дат, введенных как текст, разделенный запятыми. Но меня интересует только первая дата плавания каждой строки.

Например, "2 декабря 2018 года" является первой датой в первой строке. Аналогично, "2 февраля 2019 года" является первой датой второго ряда и так далее.

Мне нужна инструкция PHP SELECT для сортировки всей таблицы в первые даты каждой строки. Чтобы упростить задачу, я подумал о добавлении в таблицу другого поля даты и скопировал первые даты каждой строки в новое поле даты, а затем отсортировал таблицу на основе этого поля. Но это круглое решение, которое я не предпочитаю.

Есть ли простой оператор PHP/SQL, который может это сделать? Я думал о функции PHP Explode(). Но я не уверен, как я могу включить это в инструкцию SELECT. Любая помощь будет высоко оценен.

Обновление: Спасибо за ваши предложения. Я полностью согласен, эта таблица беспорядок. Скажем, я переношу даты в новую таблицу с несколькими строками для каждой строки в старой таблице, например, следующим образом.

Destinations   Ships      Voyage ID

Antarctica     MS QE2     1

Antarctica     MS TBS     2

Antarctica     MS JRB     3

Таблица дат

--Voyage ID ------ Парусный спорт

------- 1 ------------ 2 декабря 2018 г.

------- 1 ------------ 1 янв 2019

------- 2 ------------ 2 фев. 2019

------- 2 ------------ 3 марта 2019 г.

------- 3 ------------ 9 ноября 2018 г.

------- 3 ------------ 5 декабря 2018 года

Теперь, какую команду SQL следует использовать для сортировки старой таблицы по первым датам каждого идентификатора Voyage в новой таблице DATES.

  • 0
    может быть, посмотрите на: psoug.org/snippet/mySQL-Sort-comma-separated-string_500.htm
  • 3
    Поскольку это программное обеспечение, над которым сейчас работают, и, вероятно, над которым кто-то еще будет работать в будущем, я предлагаю вам сделать единственно правильную вещь - нормализовать базу данных. Вы, наверное, знаете это, так как вы обвиняете кого-то в этом, но действительно ли вы хотите, чтобы это ударило по дороге, чтобы кто-то еще мог это почистить?
Показать ещё 3 комментария
Теги:

1 ответ

2

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

Кроме того, даты не сохраняются как даты, а как строки, и в одной строке есть даже несколько дат. Это вряд ли может быть хуже. Поэтому лучший совет - переписать всю базу данных.

Если вы не хотите перепроектировать базу данных или если вам не разрешено, то мой совет: не пытайтесь решить эту проблему в SQL-запросе. Просто прочитайте все записи из базы данных, а затем выполните манипуляции и сортировку строк в PHP.

  • 0
    Можете добавить параграф о возможном исправлении скрипта? Это можно сделать в SQL, но это не очень чистое решение, см. Здесь . Вам будет лучше с небольшим PHP-скриптом.
  • 0
    @Tobias F .: Вы имеете в виду скрипт для исправления дизайна базы данных?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню