Ответ
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.номер_заказа - номер заказа, где было подключение
}
}
}
В данном случае СписокЗаявок имеет структуру: хеш хеш таблица.
Если получение хеша хешей - тупиковый вариант, то каким образом можно вывести данные по описанной схеме быстрее?
- Хеш хешей из БД или объекта table, virusav 25.05.2015 16:05
- Ответ, Misha v.3 [M] 26.05.2015 16:18
- Ответ, virusav 26.05.2015 16:45
- Ответ, Maxx [M] 25.05.2015 17:00
- Ответ, virusav 25.05.2015 17:08 / 25.05.2015 17:09
- Ответ, Maxx [M] 26.05.2015 01:37
- Ответ, virusav 26.05.2015 09:41
- Ответ, Maxx [M] 26.05.2015 09:54 / 26.05.2015 09:58
- Ответ, virusav 26.05.2015 10:51
- Ответ, Misha v.3 [M] 26.05.2015 16:21 / 26.05.2015 16:22
- Ответ, virusav 26.05.2015 16:31
- Ответ, Misha v.3 [M] 26.05.2015 23:26 / 26.05.2015 23:36
- Ответ, virusav 26.05.2015 23:51
- Ответ, Misha v.3 [M] 27.05.2015 00:39
- Ответ, virusav 27.05.2015 09:18
- Ответ, Misha v.3 [M] 27.05.2015 11:57 / 27.05.2015 11:58
- Ответ, virusav 27.05.2015 14:04 / 27.05.2015 14:10
- ваша схема плохая :), Misha v.3 [M] 28.05.2015 01:24 / 28.05.2015 01:26
- Ответ, virusav 28.05.2015 12:40
- Ответ, Misha v.3 [M] 29.05.2015 04:18
- Ответ, virusav 29.05.2015 09:58
- Ответ, Maxx [M] 27.05.2015 14:49
- Ответ, virusav 27.05.2015 15:11
- ИМХО, max_rip 27.05.2015 15:24
- Ответ, virusav 27.05.2015 16:04
- Ответ, max_rip 27.05.2015 16:40
- Ответ, virusav 27.05.2015 16:42
- Откройте для себя LEFT JOIN и RIGHT JOIN, и INNER JOIN, max_rip 26.05.2015 11:18
- Ответ, dwr 25.05.2015 17:11
- Ответ, virusav 25.05.2015 17:32
- Ответ, moko [M] 25.05.2015 19:19
- Ответ, virusav 25.05.2015 22:07
- Ответ, MoKo 26.05.2015 01:30
- Ответ, virusav 26.05.2015 09:47