2015-09-11 2 views
1

У меня есть users таблицу с полями user_id и имя пользователя и я запрашивая его следующим образом:выберите пользователя и все голоса SQL

SELECT user_id, username FROM users WHERE user_id=$1 

У меня также есть votes таблицу, которая имеет поля POST_ID и user_id. user_id - это внешний ключ, ссылающийся на поле user_id в таблице users.

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

База данных - это postgres кстати.

EDIT ОК, сначала я пробовал использовать как внутренние методы соединения, так и не работал, если не было голосов.

Когда есть голос, и я использую некоторую левую внешнюю полную внешнюю вещь .. она возвращает таблицу, как это:

user_id | username | post_id 
---------+----------+--------- 
     6 | dbot77 |  3 
     6 | dbot77 |  5 

НО ВОЗВРАЩАЕТСЯ бесполезную повторяющуюся информацию

Я просто хочу, только что из моих рук ...

user_id | username | post_id 
---------+----------+--------- 
     6 | dbot77 |  3 
     |   |  5 

ИЛИ ДАЖЕ ЛУЧШЕ

user_id | username | vote_post_ids 
---------+----------+--------- 
     6 | dbot77 |  [5, 3, etc.] 
     |   |  
+0

Что именно вы хотите получить из таблицы «голосов»? Число голосов, поданных каждым пользователем? – Patrick

+1

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

+0

Мы будем делать вам плохую услугу, если мы дадим вам sql для этого :-) вы должны прочитать о внутреннем соединении http://www.postgresqltutorial.com/postgresql-inner-join/ – e4c5

ответ

0

Хорошо это, наконец, работал для меня ...

SELECT u.user_id 
     ,u.username 
     ,ARRAY(SELECT v.post_id FROM votes v WHERE v.user_id=u.user_id) AS votes 
FROM users u 
WHERE u.user_id=$1 

вернулся:

user_id | username | votes 
---------+----------+------- 
     6 | dbot77 | {3,5} 
0
SELECT users.user_id, users.username, votes.post_id 
FROM users inner join votes on users.user_id = votes.user_id 
WHERE users.user_id=$1 
Смежные вопросы