Выполнение простой арифметики в операторе MySQL или в коде PHP - PullRequest
3 голосов
/ 16 августа 2011

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

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

SELECT start, end - start FROM foo;

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

SELECT start, end FROM foo;

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

Ответы [ 5 ]

5 голосов
/ 16 августа 2011

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

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

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

  • Вы можете более тщательно модульный тест.

1 голос
/ 16 августа 2011

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

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

1 голос
/ 16 августа 2011

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

1 голос
/ 16 августа 2011

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

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

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

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

0 голосов
/ 16 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...