Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.08.2008, 10:42
jdie jdie вне форума
Прохожий
 
Регистрация: 19.06.2008
Сообщения: 7
Репутация: 10
По умолчанию Как реализовать запрос вида один ко многим?

Господа!
Есть две таблицы:
-users
id, user_name

-roles
id, user_id, role

в таблице roles может быть несколько записей, в зависимости от количества ролей.

хочу чтобы запрос выводил user_name, список ролей через запятую.
Ответить с цитированием
  #2  
Старый 05.08.2008, 11:23
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

не вижу проблемы: SQL пиши и юзай
типа такого будет

select * from users u,roles r
where u.id = r.user_id
group by u.id

будет у тебя список сгруппированный по юзерам, потом разбираешь его как хочешь
Ответить с цитированием
  #3  
Старый 06.08.2008, 10:29
jdie jdie вне форума
Прохожий
 
Регистрация: 19.06.2008
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от xchrom
не вижу проблемы: SQL пиши и юзай
типа такого будет

select * from users u,roles r
where u.id = r.user_id
group by u.id

будет у тебя список сгруппированный по юзерам, потом разбираешь его как хочешь

охота именно через запятую, перечисление ролей, так то понятно, что можно
Ответить с цитированием
  #4  
Старый 06.08.2008, 11:34
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

Цитата:
Сообщение от jdie
Господа!
Есть две таблицы:
-users
id, user_name

-roles
id, user_id, role

в таблице roles может быть несколько записей, в зависимости от количества ролей.

хочу чтобы запрос выводил user_name, список ролей через запятую.

Так можно только через процедуры, что-то вроде этого

Код:
CREATE PROCEDURE GetTextRole (
    userid integer)
returns (
    roles_text varchar(200))
as
declare variable rolename varchar(50);
begin
  roles_text='';
  for
    select role from roles where roles.iser_id=:userid into :rolename do
    begin
       roles_text=roles_text || :rolename || ',';
    end
  suspend;
end^

Затем в запросе вызывать:
select users.id, users.user_name, gettextrole(users.id) from users

Последний раз редактировалось Phedor, 06.08.2008 в 11:36.
Ответить с цитированием
  #5  
Старый 07.08.2008, 10:11
jdie jdie вне форума
Прохожий
 
Регистрация: 19.06.2008
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Phedor
Так можно только через процедуры, что-то вроде этого

Код:
CREATE PROCEDURE GetTextRole (
    userid integer)
returns (
    roles_text varchar(200))
as
declare variable rolename varchar(50);
begin
  roles_text='';
  for
    select role from roles where roles.iser_id=:userid into :rolename do
    begin
       roles_text=roles_text || :rolename || ',';
    end
  suspend;
end^

Затем в запросе вызывать:
select users.id, users.user_name, gettextrole(users.id) from users

Спасибо огромное! Ваше решение более эллегантное, чем получилось мое..
я сделал через курсоры... =(((
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025