Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2013, 14:52   #1
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию Получить данные из связаных таблиц при помоши IN ?

Доброго времени суток.... че-то туплю...

имеем две таблицы

t1
id int()
list varchar(200)

t2
id int()
name varchar(100)

t1
1 | 2,3,4
2 | 4,7

t2
1| user1
2| user2
3| user3

итд

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

пробую так

Код:
SELECT t1.id, t2.name FROM t1 
LEFT JOIN t2 ON t2.id IN(t1.list)
в результате выдает список строк из t1 но вместо списка пользователей - только первого из списка в поле list

Вообще возможно ли сделать такое при данной структуре БД или лучше поменять структуру?
ADSoft вне форума Ответить с цитированием
Старый 30.10.2013, 15:36   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Структура не фонтан, сделать коряво, но можно. Например для сиквела примерно так
Код:
SELECT t1.id,t2.name
  FROM t2,t1
  WHERE ','+CAST(t2.id AS varchar)+',' LIKE '%,'+t1.list+',%'
Можно и вашим запросом, только не IN, а LIKE приспособить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.10.2013 в 15:40.
Аватар вне форума Ответить с цитированием
Старый 31.10.2013, 07:45   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

что-то мне подсказывает, что LIKE сделает запрос медленным, а ваш приведенный запрос - так же будет выдавать лишь первое имя пользователя?
ADSoft вне форума Ответить с цитированием
Старый 31.10.2013, 08:34   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
что-то мне подсказывает, что LIKE сделает запрос медленным
поэтому и написал, что коряво - индексы не сработают, выборка будет по всем данным обеих таблиц, что в моем варианте, что в вашем, если like туда впихнуть. in не будет работать для такой структуры не при каких обстоятельствах
Цитата:
приведенный запрос - так же будет выдавать лишь первое имя пользователя
а это проверить можно, у вас MySQL похоже, адаптируйте к нему и проверьте
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2013, 09:13   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

да понял уж, что все равно костыли. Переделал структуру таблиц, введя новую для крос-запросов, теперь все просто, быстро и с ключиками вытягиваю джойнами
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Используя данные 2-х таблиц нужно получить 1 таблицу. Smile2007 Microsoft Office Excel 15 09.12.2010 18:54
запрос вставки связаных таблиц Domanoff БД в Delphi 0 20.04.2010 17:55
Распознавание букв при помоши зондов jerniko Общие вопросы Delphi 3 19.06.2009 20:27
Курсовая работа БД при помоши Accsess в Delphi FoMurJIom Помощь студентам 1 08.12.2007 06:28
как при помоши делфи сделать графику nata1111 Помощь студентам 12 24.03.2007 01:45