2014-02-12 4 views
0

У меня есть две таблицы в моей базе данных, одна таблица содержит всех пользователей, которые позволяют говорить о социальной сети, а вторая таблица содержит, кто следует за кем. Теперь, когда пользователь A ищет пользователя B, я хочу иметь возможность не просто возвращать пользователя B, но также указать, следует ли пользователю A следовать за пользователем B. Я пробовал это, но он не работает.Выбор значений из одной таблицы

"SELECT 
`destination_id` 
FROM `followers` 
WHERE `source_id` IN 
(SELECT `username` 
FROM `userinfo` WHERE `username` 
LIKE '%".mysql_real_escape_string($data)."%' OR 
`email`LIKE '%".mysql_real_escape_string($data)."%')" 

Примеры каждой таблицы UserInfo ->

  ID username email 

      1  ABC  [email protected] 

      2  XYZ  [email protected] 

последователей ->

  source_id destination_id 

      ABC  XYZ 

      HIJ  JKL 

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

Примечание: $data - это ключевые значения от пользователя, когда он вводит пользователя, которого он ищет, и он работает. Элементы destination_id и source_id относятся к таблице последователей, и он работает так, как source_id следует за destination_id (то есть пользователь A следует за пользователем B).

Надеюсь, что это ясно.

+1

Есть ли 'userinfo.username' тот же самый тип данных, что и' followers.source_id'? –

+0

Можете ли вы показать 4 или 5 строк каждой таблицы, чтобы сделать ее более читаемой? –

+0

да, они имеют одни и те же типы данных @PeterGluck, и я сделал его более читаемым –

ответ

0

Я хотел бы использовать что-то вроде этого:

SELECT 
    u1.*, 
    CASE WHEN u2.username IS NULL THEN 'Not following' 
     ELSE 'Following' END is_following 
FROM 
    userinfo u1 LEFT JOIN followers f 
    ON u1.username = f.source_id 
    LEFT JOIN userinfo u2 
    ON f.destination_id = u2.username 
    AND (u2.username LIKE '%B%' OR u2.email LIKE '%B%') 
WHERE 
    u1.username='A' 

Пожалуйста, смотрите скрипку here.

+0

Пожалуйста, объясните, что такое u1, u2 и f. эти коды слишком продвинуты для меня. Благодарю. –

+0

Никогда не помню, я понимаю коды. работает как шарм. Спасибо миллион –

+0

, но, пожалуйста, у меня есть вопрос. В случае, когда XYZ является новым пользователем и не находится в таблице последователей, он возвращает null, как мне вернуть XYZ, даже если его не в таблице последователей, а в таблице userinfo. то есть он должен возвращать значения XYZ, если XYZ сопровождается ABC и по-прежнему возвращает XYZ, если он не находится в базе данных. –

0

Как насчет этого?

SELECT userinfo.username, ifNULL(concat(followers.destination_id, ' IS FOLLOWED'), 'NOT FOLLOWED') 
FROM userinfo 
LEFT OUTER JOIN followers 
on userinfo.username = followers.destination_id 
and followers.source_id = 'ABC' 
WHERE (username 
LIKE '%XYZ' OR email LIKE '%XYZ%') 
+0

Извините, я не получу ваш код. как этот код указывает, если пользователь A уже следит за пользователем B –

+0

Я думаю, что неправильно понял исходный вопрос, измененный запрос для проверки соответствия ABC XYZ – indybee

+0

Он возвращает значения, но за ними следует или не соблюдается, не привязывается к возвращаемым значениям, вы можете любезно помогите с этим –

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