SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.11.2012 22:24:21

GlamCity
Участник
Зарегистрирован: 25.01.2012
Сообщений: 6

Иерархическое отображение результатов mysql-запроса

Необходимо, чтобы результат запроса выглядел не так:
+------+------+-------+
| x    | y    | data  |
+------+------+-------+
|    3 |    3 |   172 |
|    3 |    3 |   721 |
|    3 |    3 |   652 |
|    3 |    3 |   444 |
|    3 |    3 |   781 |
|    2 |    2 |    48 |
|    2 |    2 |    27 |
|    2 |    2 |    13 |
|    2 |    2 |    16 |
|    2 |    2 |    99 |
|    4 |    4 |  4854 |
|    4 |    4 |  2723 |
|    4 |    4 |  1327 |
|    4 |    4 |  1663 |
|    4 |    4 |  9953 |
|    5 |    5 | 48545 |
|    5 |    5 | 27423 |
|    5 |    5 | 12327 |
|    5 |    5 | 16639 |
|    5 |    5 | 99530 |
|    1 |    1 |     4 |
|    1 |    1 |     7 |
|    1 |    1 |     3 |
|    1 |    1 |     6 |
|    1 |    1 |     9 |
+------+------+-------+

а так:
+------+------+-------+
| x    | y    | data  |
+------+------+-------+
|    3 |    3 |   172 |
|      |      |   721 |
|      |    4 |   652 |
|      |      |   444 |
|      |      |   781 |
|    2 |    2 |    48 |
|      |      |    27 |
|      |      |    13 |
|      |    3 |    16 |
|      |      |    99 |
|    4 |    4 |  4854 |
|      |      |  2723 |
|      |      |  1327 |
|      |    3 |  1663 |
|      |      |  9953 |
+------+------+-------+

Возможно ли это и если да, то как должен выглядеть запрос?
Пишу прогу в Delphi, там делаю запрос, результат надо записать в Excel...

Неактивен

 

#2 25.11.2012 03:07:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Иерархическое отображение результатов mysql-запроса

Ну так в Delphi и обрабатывайте результат, если предыдущее значение X равно последующему, то пустая строка.
В принципе такое можно и на mysql сделать с помощью пользовательских переменных, но логичней на клиенте.

Неактивен

 

#3 25.11.2012 03:19:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Иерархическое отображение результатов mysql-запроса

Если интересно как такое реализовать на MySQL, то читайте до конца тему http://sqlinfo.ru/forum/viewtopic.php?id=1742

Неактивен

 

#4 25.11.2012 10:20:23

GlamCity
Участник
Зарегистрирован: 25.01.2012
Сообщений: 6

Re: Иерархическое отображение результатов mysql-запроса

Можно и в Delphi, просто есть компонент TJvgExportExcel, который позволяет результат запроса напрямую передать в excel, без каких-либо дополнительных действий. Поэтому внешний вид надо реализовать в результате самого запроса...
Запрос имеет вид:
SELECT CONCAT(surname, " ", hunters.nm, " ", secnm) AS "ФИО", CONCAT(huntcard_serial, " ", huntcard_number, " ", huntcard_who) AS huntcard, CONCAT(period_start, " - ", period_end) AS period, places.nm AS place, animals.nm AS animal,
closed FROM hunters, permission, permission_animals, animals, places WHERE permission_animals.id_animal=animals.id AND hunters.id=permission.id_hunter AND permission.id=permission_animals.id_permission AND place=places.id AND hunters.id=1

Вот только как убрать, например, повторяющиеся ФИО?

Не уверен, что в ссылке http://sqlinfo.ru/forum/viewtopic.php?id=1742 описан нужный алгоритм...

Отредактированно GlamCity (25.11.2012 10:34:39)

Неактивен

 

#5 25.11.2012 10:55:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Иерархическое отображение результатов mysql-запроса

GlamCity написал:

Вот только как убрать, например, повторяющиеся ФИО?

Сравнивая значение со значением в предыдущей строке.

GlamCity написал:

Не уверен, что в ссылке http://sqlinfo.ru/forum/viewtopic.php?id=1742 описан нужный алгоритм...

Зря, именно такая идея там и используется.


SELECT if(@i=`фио`,'',@i:=`фио`), ... FROM (ваш запрос) t, (select @i:='') x;

Неактивен

 

#6 25.11.2012 11:02:23

GlamCity
Участник
Зарегистрирован: 25.01.2012
Сообщений: 6

Re: Иерархическое отображение результатов mysql-запроса

А x в запросе SELECT if(@i=`фио`,'',@i:=`фио`), ... FROM (ваш запрос) t, (select @i:='') x; что означает? можно его не писать?

Неактивен

 

#7 25.11.2012 11:13:36

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Иерархическое отображение результатов mysql-запроса

Не попробуешь, не узнаешь smile
А чем вам x не нравится?

Неактивен

 

#8 25.11.2012 12:52:57

GlamCity
Участник
Зарегистрирован: 25.01.2012
Сообщений: 6

Re: Иерархическое отображение результатов mysql-запроса

ну просто зачем лишний код писать? а для чего (select @i:='')?

Неактивен

 

#9 25.11.2012 13:28:25

GlamCity
Участник
Зарегистрирован: 25.01.2012
Сообщений: 6

Re: Иерархическое отображение результатов mysql-запроса

вот скриншот запроса - че-то не то получается
http://rnb-clips.ru/screen.png

Неактивен

 

#10 26.11.2012 00:14:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Иерархическое отображение результатов mysql-запроса

GlamCity написал:

а для чего (select @i:='')?

первоначальное задание значения переменной

GlamCity написал:

вот скриншот запроса - че-то не то получается

Обратите внимание на используемые мной в запросе кавычки. Не мешало бы поправить и во внутреннем запросе (только вокруг фио)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson