parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

virusav 26.05.2015 10:51

Вот сокращенная структура (таблицы и поля из русских букв для наглядности):
CREATE TABLE `заказы` (
  `код` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `номер_заявки` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`код`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

CREATE TABLE `заявки` (
  `номер_родительской_заявки` int(11) unsigned NOT NULL DEFAULT '0',
  `номер_дочерней_заявки` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`номер_дочерней_заявки`),
  KEY `номер_родительской_заявки` (`номер_родительской_заявки`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

CREATE TABLE `подключение_заявок` (
  `номер_дочерней_заявки` int(11) unsigned NOT NULL DEFAULT '0',
  `номер_заказа` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`номер_дочерней_заявки`,`номер_заказа`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
В таблице заказов поле с номером заявки текстовое, т.к. есть разные типы заказов, не везде значение числовое.
В разных заказах могут быть одинаковые номера заявок.
Одна дочерняя заявка может быть подключена в разных заказах.

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

На текущий момент первую таблицу получаю в виде table, вторую - в виде хеша таблиц с ключом "номер_родительской_заявки", прокрутив перед этим первую таблицу для получения списка заявок.
Появилась третья таблица, которую можно получить, прокрутив хеш таблиц с заявками, но мне кажется, что это не очень хороший вариант.

Можно вторую и третья таблицу выбрать в одном запросе, а потом все это преобразовать к хешу хешей ... хешей таблиц, чтобы выводить заявки через foreach по номеру родительской заявки, а подключение - по номеру дочерней.
Упрощенный пример:
	^СписокЗаказов.menu{
		^СписокЗаявок.[$СписокЗаказов.номер_заявки].foreach[key;value]{
			$key - номер дочерней заявки
			^value.menu{
				$value.номер_заказа - номер заказа, где было подключение
			}
		}
	}
В данном случае СписокЗаявок имеет структуру: хеш хеш таблица.

Если получение хеша хешей - тупиковый вариант, то каким образом можно вывести данные по описанной схеме быстрее?