Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
virusav 28.05.2015 12:40
- `заказы`.`номер заявки` имеет тип varchar, при этом `заявки`.`номер_дочерней_заявки` имеет тип int.Об этом писал ранее, почему так: в поле с номером заявки в зависимости от типа заказа может писаться число (связь с заявками) и текст.
- ни одно из этих полей не является PKЗаказы: может быть несколько заказов с одним номером заявки.
- но при всём этом, согласно схеме, эти таблицы связаны по данным полям (разных типов, без ключей), причём как многие ко многим. wtf? тут точно нет ошибки?
что такое тип_дочерней_заявки? :)Тип дочерней заявки - это вид оказываемой услуги.
создать многоуровневый хэш таблиц или хэш таблиц с вычисляемым ключём -- тоже. делается это в один проход таблицы.Это второй пример метода, где все собирается за один проход.
зачем вы постоянно упоминаете locate -- я не знаю. его в коде быть вообще не должно в 99.9% случаях :)Есть заказ с 10 дочерними заявками, по которым есть подключения.
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]Это пример на основе перекрестного запроса, а можно вычислять структуру по одной какой-нибудь таблице, например, заявкам, только уровнями будут номер_родительской_заявки, тип_дочерней_заявки (в схеме отсутствует, приведено для примера), номер_дочерней_заявки.