Есть таблица "table"
| id | user_id | a_id | b_id |
SELECT * FROM `table` WHERE `user_id` = 1
| id | user_id | a_id | b_id |
1 1 2 4
5 1 7 5
7 1 3 4
8 1 9 5
Нужно имея входные данные user_id = 1, выбрать столбцы привязанные к другим пользователям, но совпадающие по a_id && b_id
В идеале еще и посчитать кол-во совпадений, и получить такой результат
| user_id | matches_row_count |
5 1
8 5
9 32
10 7
На Python я бы описал это так:
user_id = 1
user_rows = []
for row in table:
if row.user_id == user_id:
user_rows.append(row)
result = {}
for user_row in user_rows:
for row in table:
if (user_row.a_id == row.a_id) and (user_row.b_id == row.b_id) and (user_row.id != row.user_id):
if row.user_id not in result:
result[row.user_id] = 1
else:
result[row.user_id]++
И как можно оптимизировать такие запросы? Возможно перестроить таблицу, или сделать кастомный индекс?