получить подписчиков в твиттере, как с использованием MySQL - PullRequest
2 голосов
/ 25 февраля 2011

привет, скажем, у меня есть пример

моя таблица подписчиков

A B
1 2 // same so its friend
2 1 // same so its a friend
1 3 // user 1 is following 3
1 4 // user 1 is following 4

и т. Д.

Допустим, мы пользователь 1 Как мы можем перечислить наших друзей?у меня в голове что-то вроде

SELECT COUNT(*) FROM social WHERE ((A = B) = (B = A)) as friends
// so it will be something like count friends where ( 1 = 2 ) = ( 1 = 2) if you get my logic

или мы можем как-то это сделать?

если это сработает, это будет считаться 1

1 Ответ

5 голосов
/ 25 февраля 2011

Это должно сделать это:

SELECT COUNT(me.A) FROM social AS me 
   INNER JOIN social AS you ON me.B = you.A 
WHERE me.A = you.B AND me.A = 1

Удалите COUNT, если вы хотите список друзей.

EDIT

По запросу, объяснение.

Вы JOIN представляете себе таблицу, потому что вас интересуют отношения между строками.

Я решил использовать псевдонимы таблиц как me и you, чтобы прояснить взаимосвязь. Это говорит о том, что столбец A может относиться ко мне как к последователю или к вам как к последователю. Столбец B относится к подписчику

Если бы вы переименовали столбцы, запрос читался бы более четко

если A -> follower и B -> followee, у нас будет:

SELECT COUNT(me.follower) FROM social AS me 
   INNER JOIN social AS you ON me.followee = you.follower
WHERE me.follower = you.followee AND me.follower = 1

То есть, возьмите две копии этой таблицы и JOIN строк, где подписчик в me является подписчиком в you. Затем отфильтруйте и покажите только строки, в которых подписчик в me является подписчиком в you ... там, захватив ваше желание иметь (A == B) && (B == A)

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

ВТОРОЕ РЕДАКТИРОВАНИЕ Согласно комментариям ниже, более понятная форма может быть:

SELECT COUNT(me.A) FROM social AS me 
   INNER JOIN social AS you ON me.A = you.B AND me.B = you.A
WHERE me.A = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...