Я хочу найти общие элементы из столбца "follow_list" в таблице пользователей:
+----+--------------------+-------------------------------------+
| id | name | following_list |
+----+--------------------+-------------------------------------+
| 9 | User 1 | 26,6,12,10,21,24,19,16 |
| 10 | User 2 | 21,24 |
| 12 | User 3 | 9,20,21,26,30 |
| 16 | User 4 | 6,52,9,10 |
| 19 | User 5 | 9,10,6,24 |
| 21 | User 6 | 9,10,6,12 |
| 24 | User 7 | 9,10,6 |
| 46 | User 8 | 45 |
| 52 | User 9 | 10,12,16,21,19,20,18,17,23,25,24,22 |
+----+--------------------+-------------------------------------+
Я надеялся, что смогу отсортировать по количеству совпадений для данного идентификатора пользователя. Например, я хочу сопоставить всех пользователей, кроме # 9, с № 9, чтобы увидеть, какие из идентификаторов в столбце "follow_list" у них общие.
Я нашел способ сделать это через тип данных "SET" и немного хитрости:
http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html#bits
Однако мне нужно сделать это с произвольным списком идентификаторов. Я надеялся, что это можно сделать полностью через базу данных, но это немного не в моей лиге.
РЕДАКТИРОВАТЬ: Спасибо за помощь всем. Мне все еще интересно, может ли работать подход, основанный на битах, но соединение с тремя таблицами работает хорошо.
SELECT a.following_id, COUNT( c.following_id ) AS matches
FROM following a
LEFT JOIN following b ON b.user_id = a.following_id
LEFT JOIN following c ON c.user_id = a.user_id
AND c.following_id = b.following_id
WHERE a.user_id = ?
GROUP BY a.following_id
Теперь я должен убеждать себя не преждевременно оптимизировать.