Присоединитесь к 2 таблицам Mysql, чтобы получить список всех сообщений и найти пользователей, за которыми следует конкретный пользователь (зарегистрированный пользователь INN) - PullRequest
0 голосов
/ 19 ноября 2018

В моем проекте есть две таблицы.

Таблица POSTS

p_id     p_user_id      p_title     p_description
.................................................
1        1              Post 1      lorem ipsum * 1
2        1              Post 2      lorem ipsum * 2
3        2              Post 3      lorem ipsum * 3
4        3              Post 4      lorem ipsum * 4

Таблица FOLLOWERS

f_id     f_following_users_id    f_followed_users_id     f_date
...................................................................
1        2                       1                       2018-01-25
2        2                       3                       2018-01-25
3        3                       2                       2018-01-25

теперь я хочу получить список всех пользователей в зависимости от идентификатора пользователя, вошедшего в систему.идентификатор пользователя, вошедшего в систему, взят из $ _SESSION ['user_id'].

Я хочу получить следующий результат:

Первый случай: , если вы вошли в системуuser_id равен 1, т. е. $ _SESSION ['user_id'] = 1 или follow_users_id во 2-й таблице равно 1, результат должен быть:

Array
(
[0] => Array
    (
        [p_id] => 1
        [p_user_id] => 1
        [p_title] => Post 1
        [p_description] => lorem ipsum * 1
        [f_id] => 
        [f_following_users_id] => 
        [f_followed_users_id] => 
        [f_date] =>
    )

[1] => Array
    (
        [p_id] => 2
        [p_user_id] => 1
        [p_title] => Post 2
        [p_description] => lorem ipsum * 2
        [f_id] => 
        [f_following_users_id] => 
        [f_followed_users_id] => 
        [f_date] => 
    )

[2] => Array
    (
        [p_id] => 3
        [p_user_id] => 2
        [p_title] => Post 3
        [p_description] => lorem ipsum * 3
        [f_id] => 
        [f_following_users_id] => 
        [f_followed_users_id] => 
        [f_date] => 
    )

)

последние четыре поля массива должны быть пустыми какпользователь с user_id ни за кем не последовал

Второй случай: если вошел в систему user_id user = 2, т. е. $ _SESSION ['user_id'] = 2 или follow_users_id во 2-й таблице2, результат должен быть:

Array
(
[0] => Array
    (
        [p_id] => 1
        [p_user_id] => 1
        [p_title] => Post 1
        [p_description] => lorem ipsum * 1
        [f_id] => 1
        [f_following_users_id] => 2 
        [f_followed_users_id] => 1
        [f_date] => 2018-01-25
    )

[1] => Array
    (
        [p_id] => 2
        [p_user_id] => 1
        [p_title] => Post 2
        [p_description] => lorem ipsum * 2
        [f_id] => 1
        [f_following_users_id] => 2 
        [f_followed_users_id] => 1
        [f_date] => 2018-01-25
    )

[2] => Array
    (
        [p_id] => 3
        [p_user_id] => 2
        [p_title] => Post 3
        [p_description] => lorem ipsum * 3
        [f_id] => 
        [f_following_users_id] => 
        [f_followed_users_id] => 
        [f_date] => 
    )

)

* Первые четыре поля первого 2 массива должны быть заполнены первой строкой таблицы последователей, так как пользователь с идентификатором пользователя последовал за пользователем с user_id 1. И 4 строки 3-госообщение должно быть пустым, так как пользователь с user_id 2 не следует за пользователем с user_id 2 ***

Третий случай: если вошел в систему user_id user 3, то есть $ _SESSION ['user_id']= 3 или follow_users_id во 2-й таблице равно 3, результат должен быть:

Array
(
[0] => Array
    (
        [p_id] => 1
        [p_user_id] => 1
        [p_title] => Post 1
        [p_description] => lorem ipsum * 1
        [f_id] => 
        [f_following_users_id] => 
        [f_followed_users_id] => 
        [f_date] => 
    )

[1] => Array
    (
        [p_id] => 2
        [p_user_id] => 1
        [p_title] => Post 2
        [p_description] => lorem ipsum * 2
        [f_id] => 
        [f_following_users_id] =>  
        [f_followed_users_id] => 
        [f_date] => 
    )

[2] => Array
    (
        [p_id] => 3
        [p_user_id] => 2
        [p_title] => Post 3
        [p_description] => lorem ipsum * 3
        [f_id] => 3
        [f_following_users_id] => 3
        [f_followed_users_id] => 2
        [f_date] => 2018-01-25
    )

)

Первый2 массива 4 последний столбец должен быть пустым, так как User_id 3 не подписан на эти сообщения пользователей.но третий массив последних четырех столбцов должен быть заполнен, так как user_id 3 следует user_id 2.

Я искал все решения, но тщетно.Может быть, я не смог найти правильный пост, как это сделать, даже в stackoverflow.

MySQL запрос, который я пробовал:

SELECT * FROM posts AS p LEFT JOIN followers AS f ON p.p_user_id=f.f_followed_users_id WHERE f.f_followed_users_id = p_user_id AND f.f_following_users_id = 1 ORDER BY p.p_id

, но я не получаю желаемых результатов.Я пытался с левым соединением, правым соединением внешних и внутренних соединений.Но безуспешно.Могу ли я присоединиться к этим 2 столам, как я хочу?Если да, пожалуйста, помогите мне, иначе дайте мне знать, как я могу решить эту проблему.Извините за столь большой вопрос.Я довольно новичок в SO, поэтому не знаю, как задавать вопросы здесь.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 19 ноября 2018

Я чувствую, что вы можете попробовать что-то вроде зацикливания вместо объединения таблиц, поскольку таблица ваших последователей будет иметь только одну строку, которая удовлетворяет вашим условиям.

так почему бы тебе не попробовать вот так:

1) получить все сообщения из вашей базы данных. 2) каждый пост, который вы получили, получает данные из таблицы подписчиков с указанием условий. 3) создать новый массив. 4) если шаг 2 возвращает результат, объедините данные таблицы последователей в новый массив вместе с сообщением. 5) остальное объединить сообщение с новым массивом.

и когда вы закончите для каждого цикла, попробуйте распечатать его и проверить данные, используя,

echo "<pre>";
print_r($new_array);
exit;

попробуйте это и дайте мне знать, если вам нужна дополнительная помощь

...