dart_kinselok
@dart_kinselok
Правильный вопрос содержит 50% искомого ответа...

Сложная выборка из MySQL?

Такая задача. Есть своеобразный ... калькулятор. В нем, грубо говоря, 200 позиций. Калькулятор по подсчету услуг за определенный вид работ. Цены на услуги должны генерироваться автоматически, по данным, которые вводят зарег. пользователи. Т.е., после регистрации они получают возможность заполнить "свой" калькулятор, который сохраняется в отдельную таблицу (для каждого юзера - своя таблица со значениями). Есть кронка, которая каждую ночь по идее будет доставать все-все-все значения из БД, из каждой таблицы, по каждой категории, (т.е., каждая таблица может содержать по 200 записей, и если пользователей будет хотя бы десять - это уже 2000 запросов) только ради того, чтобы выбрать самое большое значение для конкретной категории. Общий вид таких таблиц
-----------------------------
| id | category_id | price |
...
| 234 | 156 | 52 |
| 235 | 157 | 12 |
...
-----------------------------

Получается просто нереальная нагрузка на сервер. И среди всех таблиц, коих будет тысячи, нужно выбрать максимальное и минимальное значение для определенного category_id. Надеюсь, что объяснил понятно.

Пока что, метод просто адовый - выбираю все таблицы SHOW'ом, прохожусь по ним foreachами, whilами, вытягиваю все значения, сохраняю их все в отдельный массив и так столько раз, сколько найдется в базе таблиц. В итоге, два юзера заняли у меня около 185 ms и прошло около тысячи запросов. Как поступить?(

Спасибо заранее!
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 1
DirecTwiX
@DirecTwiX
"display: flex;" уже предлагали?
Не очень понятно.
  1. Почему бы не слить все таблицы в одну, добавив одну колонку для признака?
  2. Всех пользователей можно обрабатывать в одном запросе
  3. Вместо того, чтобы выполнять запросы в цикле по таблицам (да и вообще любые запросы в цикле), лучше собрать текст запроса динамически и выполнить один раз
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы