У меня есть две таблицы в моей базе данных один, чтобы держать пользователей информации (users_table) , а другой следит за друзейулучшения запроса списка друзей: подсчет общих друзей
users_table:
id username avatar
1 max max.jpg
2 jack jack.jpg
friends_table:
id u1_id u2_id
1 1 2
2 1 3
в каждом профиле пользователя я показать его/ее список друзей
вот мой запрос
select u.id,
u.username,
u.avatar
from friends_table f
join users_table u on f.u1_id = u.id || f.u2_id = u.id
where u.id <> $profile_id
and (f.u1_id = $profile_id || f.u2_id = $profile_id)
этот запрос выбирает друзьям владельца профили ($ profile_id)
и присоединиться к ним со столом пользователя, чтобы получить каждый друг имя и аватар
теперь я хочу чтобы подсчитать общих друзей между каждым другом и владельцем профиля, возможно ли это в одном запросе, или я должен сделать длинный и, вероятно, медленный запрос, подобный этому для каждого основанного друга (это всего лишь пример, и он может иметь некоторую синтаксическую ошибку):
foreach ($friends_list_query_resul as $qr){
$friend_id = $qr['id'];
$mutual_count = mysql_query
("select count(*) from friends_table where
($u1_id = $friend_id || $u2_id = $friend_id)
&&
($u1_id IN (SELECT `u1_id`,`u2_id` from friends_table where
($u1_id = $profile_id || $u2_id = $profile_id))
||
$u2_id IN (SELECT `u1_id`,`u2_id` from friends_table where
($u1_id = $profile_id || $u2_id = $profile_id))
")
}
Не бойтесь заглавных букв ... – Lix
Мой совет состоит в том, чтобы извлечь список друзей каждого идентификатора, а с php сделать совпадение между общими друзьями, MSql медленнее, чем другие языки программирования, когда речь идет о манипуляции данными. – jcho360
@ jcho360 Плохой совет. Базы данных имеют тенденцию масштабироваться намного лучше, чем такой подход к памяти в любой момент. Базы данных не «медленнее, чем другие языки программирования, когда речь идет о манипулировании данными», на самом деле они обычно намного быстрее, * если * используется правильно. –