#mysql #sql #select #join #query-performance
#mysql #sql #выберите #Присоединиться #запрос-производительность
Вопрос:
Я хочу перечислить всех людей, которые $_SESSION['userid']
следуют и не следуют
Этот запрос ниже предназначен для последующего приведения, он работает
В (медленно)
SELECT user.* FROM user
WHERE user.userid
IN (SELECT follow.followtoid FROM follow
WHERE follow.followerid = $_SESSION['userid'])
СОЕДИНЕНИЕ (быстрое)
SELECT p.*
FROM user p
JOIN follow f ON p.userid = f.followtoid
WHERE f.followerid = $_SESSION['userid']
Для тех, кто все еще не следует приведению, это работает, но кажется очень медленным
Пожалуйста, подскажите мне, как мне использовать JOIN вместо NOT IN
НЕ ВХОДИТ (медленно)
SELECT user.* FROM user
WHERE user.userid
NOT IN (SELECT follow.followtoid FROM follow
WHERE follow.followerid = $_SESSION['userid'])
Ответ №1:
Вы могли бы использовать LEFT JOIN
и исключить все строки, которые имеют совпадения;
SELECT p.*
FROM user p
LEFT JOIN follow f
ON p.userid = f.followtoid
AND f.followerid = $_SESSION['userid']
WHERE f.followtoid IS NULL
Ответ №2:
Попробуйте это:
SELECT u.*
FROM user u
LEFT JOIN follow f ON u.userid = f.followtoid AND f.followerid = $_SESSION['userid']
WHERE f.followtoid IS NULL;
или
SELECT u.*
FROM user u
WHERE NOT EXISTS (SELECT 1 FROM follow f
WHERE u.userid = f.followtoid AND f.followerid = $_SESSION['userid']
);