2016-01-30 2 views
0

У меня есть две таблицы. skill и userskill.SELECT name Из объединенной таблицы, в которой объединен идентификатор строки таблицы в наборе столбцов родительской таблицы

умение строки

type:1 
name:'Web Development' 
id: 1 

type:1 
name:'Graphic Design' 
id: 2 

userskill грести

user_id: 1 
skill_type: 1 
skills: '1,2' 

Следующий запрос возвращает только первую строку, а не оба ряда, как я ожидал. Мне было интересно, почему, и если этот тип соединения даже возможен/хорошая практика.

запрос

SELECT b.name,b.type 
FROM userskill a 
JOIN skill b ON a.skill_type=b.type 
WHERE a.user_id="1" AND b.id IN(a.skills) 

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

+0

Не хранить списки в качестве разделенных запятых строк. SQL не поддерживает то, что вы пытаетесь сделать. Таблица 'UserSkills' должна иметь одну строку для каждого пользователя и навыка. –

+0

fyi, он работает с поиском в комплекте. @GordonLinoff http://puu.sh/mPmJ3/1212ad07ea.png ли это хорошая практика или нет, это еще одна история. – r3wt

+0

. , Очень плохая практика. –

ответ

2

умение Пользователя таблицы имеет атрибут с несколькими значениями, вы должны позволить несколько строк для таблицы userskill с одной и той же информацией, но различных навыками

Пример:

user_id skill_type skill 
1  1   1 
1  1   2 

Первичный ключ в этом случае будет быть все атрибуты

Ссылка: How to store multiple values in single column where use less memory?

Редактировать

Запрос будет:

SELECT b.name,b.type 
FROM userskill a 
JOIN skill b ON a.skill_type=b.type 
WHERE a.user_id="1" 
+0

, то как я могу вернуть список в одном запросе? что кажется ужасным и для написания. – r3wt

+0

@ r3wt это правильный способ создания таблиц. Проверьте обновление для запроса – CMPS

+0

@ r3wt http://stackoverflow.com/questions/18605669/how-to-store-multiple-values-in-single-column-where-use-less-memory В вашем случае вы не 't нужно создать другую таблицу, потому что userskill должен быть определен похожим на мой пример – CMPS

Смежные вопросы