Я застрял с таблицей 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.
Вы страдаете от ужасного дизайна базы данных. Вместо того, чтобы иметь одну таблицу для кораблей, одну для пунктов назначения и одну для фактических поездок, у вас есть только одна таблица. Это не то, что должна быть реляционная база данных.
Кроме того, даты не сохраняются как даты, а как строки, и в одной строке есть даже несколько дат. Это вряд ли может быть хуже. Поэтому лучший совет - переписать всю базу данных.
Если вы не хотите перепроектировать базу данных или если вам не разрешено, то мой совет: не пытайтесь решить эту проблему в SQL-запросе. Просто прочитайте все записи из базы данных, а затем выполните манипуляции и сортировку строк в PHP.