У меня есть следующий запрос mysql:
$get_friends_posts = "SELECT * FROM users_friendships
WHERE userid1 != $myid and userid2 = $myid
or userid2 != $myid and userid1 = $myid";
$friendpost = mysqli_query($mysql, $get_friends_posts);
$ myid - уникальный идентификатор пользователя, который зарегистрировался и просматривает этот скрипт. Теперь я хочу получить удостоверение личности через чек или что-то, что не соответствует мне, как противник дружбы.
В базе данных есть строки для id, userid1 и userid2.
Этот запрос вернет один столбец (userid
) из таблицы users_friendships
где $myid
- либо userid1
либо userid2
. Я предполагаю, что не будет строк, где userid1
и userid2
будут одинаковыми.
SELECT
CASE WHEN userid1 = $myid THEN userid2 ELSE userid1 END AS userid
FROM users_friendships
WHERE userid1 = $myid OR userid2 = $myid
Если вы хотите использовать эти результаты для получения данных из другой таблицы, вы можете сделать что-то вроде этого:
SELECT
posts.*
FROM posts
WHERE posts.userid IN
(
SELECT
CASE WHEN userid1 = $myid THEN userid2 ELSE userid1 END AS userid
FROM users_friendships
WHERE userid1 = $myid OR userid2 = $myid
)
Или, если у вас возникла более сложная потребность, когда вам нужна дополнительная информация о пользователе, а также о записи, вы можете сделать что-то вроде этого:
SELECT
users.name,
posts.date,
posts.title
FROM users_friendships
INNER JOIN users ON users.userid = CASE WHEN users_friendships.userid1 = $myid THEN users_friendships.userid2 ELSE users_friendships.userid1 END
INNER JOIN posts ON posts.userid = CASE WHEN users_friendships.userid1 = $myid THEN users_friendships.userid2 ELSE users_friendships.userid1 END
WHERE users_friendships.userid1 = $myid OR users_friendships.userid2 = $myid
ORDER BY posts.date DESC