gpt4 book ai didi

php - 检查用户是否收藏了某个项目

转载 作者:行者123 更新时间:2023-11-29 13:00:28 25 4
gpt4 key购买 nike

我正在尝试构建一个系统,允许用户从他们的收藏夹中添加或删除项目。我从this post开始,所以我用这种方式创建了一个连接表(我保留原始OP的项目作为示例):

CREATE TABLE user_favorites (
user_id INT NOT NULL,
movie_id INT NOT NULL,
PRIMARY KEY (user_id, movie_id),
FOREIGN KEY (user_id) REFERENCES users (user_id),
FOREIGN KEY (movie_id) REFERENCES movies (movie_id)
)

在我自己的项目中,我在页面上呼应了几部不同的“电影”:

try{
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$query="SELECT * FROM movies";
$res=$con->query($query);
$movies=$res->fetchAll(PDO::FETCH_ASSOC);
return $movies;
}

catch(PDOException $e){
echo 'Error : '.$e->getMessage();
}

然后我将它们格式化以满足我的需要并在页面上回显它们:

echo (formatMovies($movies));

(formatMovies 基本上是一个 foreach,循环遍历所有项目并构建必要的 HTML。)

但事情是这样的:我想根据用户是否喜欢电影来应用不同的风格。

我的问题是:检查用户是否喜欢这部电影的最佳方法是什么,以及我应该何时这样做?我是否应该在 formatMovies 循环中执行此操作,这意味着我将为 $movies 中的每个项目发送一个额外的查询?对我来说这似乎效率很低。

谢谢大家!

最佳答案

您可以使用联接在单个查询中完成此操作...

$query = $con->prepare("
SELECT m.*, f.movie_id IS NOT NULL AS has_favorited
FROM movies AS m
LEFT JOIN user_favorites AS f ON(f.user_id = :userId AND m.movie_id = f.movie_id)
");

$query->execute(array(':userId' => $userId));
$movies = $query->fetchAll(PDO::FETCH_ASSOC);

然后在循环中,只需检查 if($movies['has_favorited']),然后您就会知道它是否被收藏。

关于php - 检查用户是否收藏了某个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23424165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com