parser

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

 

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

Ответ

virusav 28.05.2015 12:40

- `заказы`.`номер заявки` имеет тип varchar, при этом `заявки`.`номер_дочерней_заявки` имеет тип int.
Об этом писал ранее, почему так: в поле с номером заявки в зависимости от типа заказа может писаться число (связь с заявками) и текст.
В планах вынести в отдельное поле числовое значение.
- ни одно из этих полей не является PK
- но при всём этом, согласно схеме, эти таблицы связаны по данным полям (разных типов, без ключей), причём как многие ко многим. wtf? тут точно нет ошибки?
Заказы: может быть несколько заказов с одним номером заявки.
Заявки: на один номер родительской заявки может быть много дочерних заявок.
Индексы есть, но они не являются уникальными.
что такое тип_дочерней_заявки? :)
Тип дочерней заявки - это вид оказываемой услуги.
Если не ошибаюсь, об этом уже писал ранее.
создать многоуровневый хэш таблиц или хэш таблиц с вычисляемым ключём -- тоже. делается это в один проход таблицы.
Это второй пример метода, где все собирается за один проход.
зачем вы постоянно упоминаете locate -- я не знаю. его в коде быть вообще не должно в 99.9% случаях :)
Есть заказ с 10 дочерними заявками, по которым есть подключения.
На одну дочернюю заявку может быть несколько подключений по разным заказам, поэтому при прокручивании дочерних заявок найти, было ли подключение по текущему заказу, можно только через locate.
P.S. приведите пример данных исходной таблицы (строк 10 данных) и многоуровневого хеша таблиц с этими-же данными, который вы хотели-бы получить.
INSERT INTO `заказы` (`код`,`номер_заявки`) VALUES (1,'111'),(2,'222'),(3,'333'),(4,'444'),(5,'222');
INSERT INTO `заявки` (`номер_родительской_заявки`,`номер_дочерней_заявки`) VALUES (111,111111),(111,111112),(111,111113),(222,222222),(222,222223),(444,444444),(444,444445),(444,444446),(444,444447);
INSERT INTO `подключение_заявок` (`номер_дочерней_заявки`,`номер_заказа`) VALUES (111112,0),(222222,2),(222223,2),(222223,5),(444445,4),(444447,4);
Если выбрать в одном запросе заявки и подключения, то получаем:
номер_родительской_заявки
	111
		номер_дочерней_заявки
			111111
				номер_заказа
			111112
				номер_заказа
					0==>[table]
			111113
				номер_заказа
	222
		номер_дочерней_заявки
			222222
				номер_заказа
					2=>[table]
			222223
				номер_заказа
					2=>[table]
					5=>[table]
	444
		номер_дочерней_заявки
			444444
				номер_заказа
			444445
				номер_заказа
					4=>[table]
			444446
				номер_заказа
			444447
				номер_заказа
					4=>[table]
Это пример на основе перекрестного запроса, а можно вычислять структуру по одной какой-нибудь таблице, например, заявкам, только уровнями будут номер_родительской_заявки, тип_дочерней_заявки (в схеме отсутствует, приведено для примера), номер_дочерней_заявки.
[table] в последнем уровне содержит еще набор полей, которые нужны для вывода.