php - 根据 cookie 数据连接两个表

标签 php mysql

我正在制作一个基于 cookie 的收藏夹系统,需要根据 cookie 中存储的唯一用户 ID 连接两个表中的数据,以便我可以知道哪些项目已标记为收藏夹。

我知道我需要进行 JOIN,但还没有经常使用它们,而且还没有真正了解它们。

从数据库中选择项目的现有查询:

$query = mysql_query("SELECT *, UNIX_TIMESTAMP(`date`) AS `date` FROM songs WHERE date >= DATE_SUB( NOW( ) , INTERVAL 2 WEEK ) ORDER BY date DESC");

我的收藏夹表设置为:ID FAVORITE USERID,其中 ID 是主键,FAVORITE 是表歌曲中的歌曲 ID,USERID 是存储在 cookie 中的哈希值。

我需要加入收藏夹表中 USERID 字段与 cookie 哈希变量匹配的所有行。

我还需要收集与歌曲 ID 匹配的收藏夹中的总行数,以便我可以显示将该项目设置为收藏夹的人数,以便我可以显示有多少人喜欢它。但也许需要将其作为单独的查询来执行?

最佳答案

我想这应该可以:

$user_id = intval($_COOKIE['user_id']);
$query = mysql_query(sprintf("
    SELECT *
    FROM songs s
       INNER JOIN favorites f
       ON f.favorite = s.id
    WHERE f.userid = %s
", $user_id));

你可能应该read up关于不同类型的连接。

然后要获取返回的总行数,您可以调用 mysql_num_rows关于结果:

$favorite_song_count = mysql_num_rows($query);

编辑:要选择所有歌曲但记下最喜欢的歌曲,您可以这样做:

$query = mysql_query(sprintf("
    SELECT s.*, f.id as favorite_id
    FROM songs s
       LEFT JOIN favorites f
       ON f.favorite = s.id AND f.userid = %s
", $user_id));

通过将其从 INNER JOIN 切换到 LEFT JOIN,我们将选择所有歌曲,即使它们在收藏夹表中没有相应的记录。所提供的 user_id 最喜欢的任何歌曲都将具有非 NULL 的 favorite_id 值。

关于php - 根据 cookie 数据连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123746/

相关文章:

mysql - 如何在 MySQL 中用不同的值替换该值?

java - 无法从android中的远程ubuntu tomcat服务器连接mysql数据库

php - 如何使用 least-n-per-group 查询进行左连接?

python - "incorrect string value"但可以用 UTF-8 解码

php - 使用 PHP & MySQL 的考勤系统

mysql - 如何创建与 Rails 中的 View 相对应的模型

php - 使用数组的数组填充表单选项列表

php - 我可以在 PHP 中使用 for 或 while 循环这段代码吗?

php - 如何将错误消息输入到登录模式中

php - 在 PHP 中高效地逐行读取大文件?