2013-04-21 2 views
0

Я боюсь с некоторыми sql-запросами при вызове из разных таблиц.Извлечь значения из разных таблиц с одинаковыми идентификаторами

Im пытается получить некоторые результаты из 2 таблиц. В этом случае я хотел бы получить значения из user.id = 1 и значения пользователя, которым является user.id = 1.

но всегда в конечном итоге дает мне только либо все пользователи, которые имеют тот же follow_id руды только в результате user.id = 1.

Я думал о чем-то вроде этого, но этот запрос дает пустые результаты.

SELECT 
user.email, user.username, tweets.message, tweets.date, userdetails.profile_img,   userdetails.firstname, userdetails.lastname, following.id, following.user_id, following.follow_id 
FROM user 
JOIN userdetails ON user.id = userdetails.user_id 
JOIN tweets ON userdetails.user_id = tweets.user_id 
JOIN following ON following.follow_id 
WHERE user.id = following.follow_id AND user.id = 1 

Таблицы. ID | user_id | follow_id

Tweets 
user_id|id|date|message 

user 
id|email|password|username 

userdetails 
id|firstname|lastname|profile_img|user_id|about 
+0

В вашем вопросе говорится: «Значения пользователей, которые имеют одинаковые« follow_id ». Тот же 'follow_id' как? Можете ли вы привести пример данных и результатов, которые вы хотите? –

+0

@GordonLinoff То же имя follow_id, что и user.id. Его как приложение Twitter, которое пытается создать для цели обучения. Итак, если пользователь 2, что следует за пользователем 1. Я добавляю пользователя 1 в follow_id – Dymond

+0

Немного непонятно, чего вы действительно хотите здесь, это информация о пользователе с ID 1, а также информация обо всех пользователях, следующих за пользователем с ID = 1? –

ответ

1
SELECT 
user.email, user.username, tweets.message, tweets.date, userdetails.profile_img,userdetails.firstname, userdetails.lastname, '' as id, '' as user_id, '' as follow_id 
FROM user 
JOIN userdetails ON user.id = userdetails.user_id 
JOIN tweets ON userdetails.user_id = tweets.user_id 
WHERE user.id = 1 
UNION ALL 
SELECT 
user.email, user.username, tweets.message, tweets.date, userdetails.profile_img,userdetails.firstname, userdetails.lastname, following.id, following.user_id, following.follow_id 
FROM user 
JOIN userdetails ON user.id = userdetails.user_id 
JOIN tweets ON userdetails.user_id = tweets.user_id 
JOIN following ON user.id = following.user_id and following.follow_id = 1 

Этот запрос даст все твиты от пользователя 1. И все твиты от пользователей, которые следуют за пользователем 1 i belive.

+0

:) Я просто попробовал то же самое, но он дал мне только результат от пользователя 1. ничего от пользователя, который следит за пользователем 1 :( – Dymond

+0

Omg, я полностью объяснил это неправильно. Im должен получать значения от пользователя .id = 1 и значения пользователя user.1. Im извините. – Dymond

0

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

select count(*) 
from user 
where user.id = 1 

Если возвращено число больше 0, то я бы тогда запустить это:

select count(*) 
from user u inner join userdetails ud on u.id = ud.id 
where u.id = 1 

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

+0

Дело в том, что у меня есть запрос для возврата значений user.id = 1 и follow.follow_id. Его, когда я пытаюсь их объединить, я получаю нулевой результат. – Dymond