uscr 11.06.2013 16:03
Есть вопрос! — Помогите составить запрос к БД удобный для обработки в php.
Здравствуйте! Имеется БД mysql с табличкой hardware.Выглядит примерно так:
Записей, разумеется, гораздо больше.
Нужно из PHP на неком сайте вывести такую таблицу в которой будет видно, сколько железок в определённом статусе привязано к определённому региону, при этом обойтись как можно меньшим количеством запросов. Сейчас сделал такую табличку:
Статус1 Регион1 кол-во
Статус1 Регион2 кол-во
Статус1 Регион3 кол-во
Статус2 Регион1 кол-во
Статус2 Регион2 кол-во
Статус3 Регион3 кол-во
Нужно переделать её в человеческий вид:
1 |
Регион1 Регион2 Регион3
|
Беда в том, что не знаю, как подступиться. Всё, что приходит на ум заставит делать чуть не по (кол-во регионов*кол-во статусов) запросов каждый раз, что непозволительно.
Сейчас моя "нечеловеческая таблица" рисуется вот таким кодом (запросы к БД отягощены JOIN'ами, но в целом понятно, что происходит. И не обращайте внимания на способ работы с БД. Тут так принято): pastebin.
То есть, выбираю все статусы и прохожусь по ним циклом. Для каждого статуса в цикле делаю запрос, который возвращает количество железок с таким статусом в каждом регионе. И во вложенном цикле рисую табличку.
Тащемта, вот так. Прошу мнений и советов.
ananas 11.06.2013 18:24 #
+ 1 -
через VIEW, не?
поясню.
как я понял в таблице надо просто посчитать количество строк в которых равны регионы между собой и статусы между собой, это и делает мой запрос.
тестовую табличку я расширил
результат запроса
все рассортировано по статусам и по регионам, осталось проверить на реальной табличке и приделать вывод в html.
как я понял в таблице надо просто посчитать количество строк в которых равны регионы между собой и статусы между собой, это и делает мой запрос.
тестовую табличку я расширил
результат запроса
все рассортировано по статусам и по регионам, осталось проверить на реальной табличке и приделать вывод в html.
для ускорения можно попробовать добавить составной индекс по полям region и status
Использовал этот вариант. Переделал всё так, что бы с одной стороны легко было выводить в html (не люблю запутывать код просто) с другой - обойтись меньшим количеством запросов к БД.
Логика такая: выбираю все статусы. Выбираю все регионы. В цикле формирую первую строку таблицы (с регионами) в том-же цикле забиваю массив количеством приставок по каждому статусу в регионе. На выходе получается массив, к которому можно обращаться как counts[status][region]. Ну и дальше немного магии и получается красивая табличка.
Получилось <�количество регионов> запросов на отрисовку страницы. Поскольку, регионов всего 3 и расширения не планируется, пока всё норм.
Логика такая: выбираю все статусы. Выбираю все регионы. В цикле формирую первую строку таблицы (с регионами) в том-же цикле забиваю массив количеством приставок по каждому статусу в регионе. На выходе получается массив, к которому можно обращаться как counts[status][region]. Ну и дальше немного магии и получается красивая табличка.
Получилось <�количество регионов> запросов на отрисовку страницы. Поскольку, регионов всего 3 и расширения не планируется, пока всё норм.
А не проще ли сортировку на php возложить? Дёрнуть из базы по статусу и потом в коде уже раскидать по регионам. Это, по-моему, менее накладно будет.