Выполнение простой арифметики в инструкции MySQL или в PHP-коде

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

Я могу отправить этот запрос:

 SELECT start, end - start FROM foo; 

или, я мог бы просто сделать

 SELECT start, end FROM foo; 

и выполнить операцию $end - $start в PHP. Лучше ли оставить такие простые операции для MySQL?

Related of "Выполнение простой арифметики в инструкции MySQL или в PHP-коде"

Я бы классифицировал «$ end – $ start» как бизнес-логику, и это относится к слою модели, а не к слою persistence. Это означает выполнение вычисления в PHP. Это имеет ряд преимуществ:

  • Если позже вы измените базы данных, вам не понадобятся те же самые операторы.

  • Вы можете управлять логикой, которая выполняет расчет.

  • Вы можете более тщательно тестировать единицы измерения.

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

 SELECT start, (end - start) AS difference FROM foo; 

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

В другом ответе говорится, что логика как можно ближе подходит к БД (что ИМО – ужасная идея), хотя в этом случае я не вижу ничего плохого в том, что вы делаете, а просто помните, что база данных уже много работает чтобы просто получить данные, если вы собираетесь делать много логики в базе данных, это сделает ее намного медленнее. Для небольших приложений это не имеет большого значения, но для крупномасштабных приложений вы очень быстро увидите последствия не только в производительности, но и добавили новые функции (логика разделения между базой данных и уровнем приложений становится очень запутанной и сложной для рефакторинга).

Обычно любое преобразование вида должно обрабатываться в слое представления. В вашем случае ваша модель спроектирована с полями start & end, поэтому вы должны раскрывать эти поля из sql.

MySQL может выполнить некоторую базовую арифметику. Тем не менее, определенно лучше выполнить такую ​​арифметику в PHP, если вы все равно используете данные на PHP.

MySQL предназначен для простого хранения и извлечения реляционных данных.

Для простых операций я бы использовал MYSQL. Я не гуру, но мне нравится держать вещи такими же простыми и чистыми, насколько это возможно, поэтому, когда возможно, я использую встроенные функции MYSQL, чтобы сделать материал, который можно сделать с помощью php. Другими словами – использование MYSQL снизило бы объем кода и форматирование, необходимые для отображения данных.