Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод результатов запроса в табличной форме. 
:(
    Опции темы
yerdnA
  Дата 24.6.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.6.2004

Репутация: нет
Всего: нет




Структура таблиц
deplist
depid int not null primary key auto_increment
depname varchar(30) not null unique

talks
talkid int not null primary key auto_increment
filldate date not null
telno tinyint not null
minutes integer not null
depname int not null references deplist

query
select talks.filldate, deplist.depname,talks.telno,talks.minutes,
from deplist, talks
where deplist.depid=talks.depid and
filldate='2004.05.31';

Результат
31.05.2004-depar1-100-110
31.05.2004-depar1-101-90
31.05.2004-depar1-102-130
31.05.2004-depar2-201-130
31.05.2004-depar2-202-100
31.05.2004-depar2-203-100
31.05.2004-depar3-300-250
31.05.2004-depar3-301-45
31.05.2004-depar3-302-45

Какой надо построить запрос чтобы получить вот такой результат.

---depar1--|---depar2--|---depar3--|
-----+-----+-----+-----+-----+-----+
telno|-min-|telno|-min-|telno|-min-| date
-----+-----+-----+-----+-----+-----+
-100-|-110-|-200-|-130-|-300-|-250-|31.05.2004
-101-|-90--|-201-|-100-|-301-|-45--|31.05.2004
-102-|-130-|-203-|-100-|-303-|-45--|31.05.2004
-----+-----+-----+-----+-----+-----+
В качестве заголовка строк filldate, столбцов - depname, а на их пересечении данные telno и min.

Т.е. первые два столбца относятся к depar1
3,4 столбец к depar2; 5,6 к depar3.

P.S. '-' нарисовал чтобы таблица не съезжала.
Перлами типа: почитай документацию или ознакомься с основами MySQL, прошу вас утруждаться. Если бы там нашел тут бы не тратил драгоценное время (свое и чужое).

PM MAIL   Вверх
Akina
Дата 24.6.2004, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



И все-таки
Цитата
ознакомься с основами MySQL
потому как их вполне достаточно. Поясняю.

Есть твой запрос:
Код
select talks.filldate, deplist.depname,talks.telno,talks.minutes,
from deplist, talks
where deplist.depid=talks.depid and
filldate='2004.05.31';

Назовем его, скажем, запрос А.
Создадим из него запрос А1:
Код
select talks.filldate, deplist.depname,talks.telno,talks.minutes,
from deplist, talks
where deplist.depid=talks.depid and
filldate='2004.05.31' and
deplist.depname='depar1';

Аналогично создадим запросы А2 и А3.
Теперь свяжем запросы и создадим запрос Б:
Код
select A1.*, A2.*, A3.*
from A1
inner join A2
on A1.filldate=A2.filldate and A1.depname=A2.depname
inner join A3
on A1.filldate=A3.filldate and A1.depname=A3.depname

Понимаешь, что получилось? данные слеплены, теперь осталось получить необходимые данные из запроса Б.

Доделку и удаление лишнего сделаешь сам - мне влом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
<Spawn>
Дата 24.6.2004, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 4
Всего: 64



Такого тебе не удасться достичь одним селектом. Ты куда все выводишь? На веб страницу? В любом случае сначала нужно получить все отделы:

Код
SELECT deplist.depname
  FROM deplist, talks
 WHERE deplist.depid=talks.depid
   AND filldate='2004.05.31' group by deplist.depname


а потом сделать цикл по ним и сделать селект такого вида:

Код
'SELECT talks.filldate, deplist.depname,talks.telno,talks.minutes,
   FROM deplist, talks
  WHERE deplist.depid=talks.depid
    AND filldate='2004.05.31'
    AND deplist.depname = ' + <Название ранее полученого отдела>


после чего вывести все так как тебе нужно

Это сообщение отредактировал(а) <Spawn> - 24.6.2004, 20:03


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
yerdnA
Дата 25.6.2004, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.6.2004

Репутация: нет
Всего: нет



Спасибо за содействие. Теперь знаю что надо. Свой путь познания БД начинал с MS Access (он очень сильно ламероориентирован), в нем есть такая штука как перекрестный запрос (crosstab query), по незнанию думал что это стандартная инструкция SQL . Оказывается что в MySQL подобное надо ручками делать. Ну что ж, будем.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0978 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.