получать все сообщения, понравившиеся пользователю из базы данных - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь получить все сообщения, которые понравился пользователю, а не все сообщения.

У меня есть таблицы базы данных следующим образом:

лайки (столбцы (int): likeID, likeBy, likeOn)

записей (столбцы: postID, postBy, текст, например, количество)

пользователей (столбцы: ИД пользователя, имя пользователя)

Вот мой код, чтобы получить понравившуюся пользователям запись (на данный момент она получает все понравившиеся сообщения в базе данных, а не понравившиеся сообщения)

public function likes($user_id, $num){

    $stmt = $this->pdo->prepare("SELECT * FROM `likes`, `posts`, `users` WHERE `likeOn` = `userID` and `user_id` = `postBy` ORDER BY `likeOn` DESC");

    $stmt->bindParam(":num", $num, PDO::PARAM_INT);
    $stmt->execute();
    $tweets = $stmt->fetchAll(PDO::FETCH_OBJ);

есть идеи, как получить понравившиеся пользователю сообщения и не все понравившиеся сообщения?

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Я думаю, это будет работать.

Я изменил ваш запрос, чтобы оператор возвращал сообщения и лайки в сочетании с внутренним соединением

public function likes($user_id, $num){

    $stmt = $this->pdo->prepare("SELECT * likes INNER JOIN posts ON likes.likeOn = posts.postID WHERE likes.likeBy = ? ORDER BY `likeOn` DESC");
    $stmt->bind_param("i",$user_id);
    $stmt->bindParam(":num", $num, PDO::PARAM_INT); // Don't know what this does 
    $stmt->execute();
    $tweets = $stmt->fetchAll(PDO::FETCH_OBJ);
}

Редактировать: удалил таблицу User из запроса, поскольку идентификатор пользователя уже существовал в аналогичной таблице (likeBy).

0 голосов
/ 26 октября 2018
select p.postID from posts p inner join likes l on l.likeOn=p.postID inner join users u on u.userID = l.likeBy;

Я думаю, что приведенный выше запрос будет работать для вас, попробуйте его в базе данных MySQL.

0 голосов
/ 26 октября 2018

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

Но, учитывая вашу текущую структуру (и предполагается, что вы обновляете количество лайков, и чтоposts.postBy содержит идентификатор пользователя), вы можете попробовать что-то вроде:

SELECT posts.* FROM posts AS p WHERE COUNT(p.likeCount) > 0 AND p.postBy = the_user_id_variable

Если вам нужны только сообщения, а userId содержится в строке сообщения, вам не нужно объединять разные таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...