【问题标题】:Additional query for each item?每个项目的附加查询?
【发布时间】:2013-12-11 08:52:27
【问题描述】:

我有一个很长的项目清单。即:

$query = mysql_query("SELECT i.id
            ORDER by i.id DESC LIMIT 0, 200"); 
while($row = mysql_fetch_array($query)){ $num_row++;
}

输出:

[项目 1] [项目 2] [项目 3] ... [项目 200]

事情就是这样。如果用户 喜欢该项目,我需要检查每个项目。我是否必须为第一项查询的每一行启动一个额外的查询?我们谈论的是 200 个查询...是否可以将此查询加入第一个查询?

我正在考虑这样构建“like”表:

id, item_ref, user_id
----------------------
1,     1,     5
1,     5,     5
1,     3,     5

以 user_id 5 登录时应显示:

[物品 1 喜欢] [物品 2] [物品 3 喜欢] [物品 4] [物品 5 喜欢] ... [物品 200]

有什么建议吗?

非常感谢!

【问题讨论】:

    标签: mysql database-design data-structures


    【解决方案1】:

    您可以加入点赞表并使用它来查看特定用户是否有点赞。您错过了一些查询,但类似于(假设您使用您提到的类似表):

    SELECT i.id, l.id IS NOT NULL AS liked
    FROM item i
    LEFT JOIN likes l ON (i.id = l.item_ref AND l.user_id = YOURUSERIDHERE)
    ORDER by i.id DESC LIMIT 0, 200
    

    liked 在结果中是给定用户是否有喜欢。

    【讨论】:

    • 这似乎很好用! BTW $row['liked'] 在真时给我一个“1”,在假时给我一个“0”,对吗?
    • @James 是的,没错。 MySQL 认为零为假,非零为真。 PHP 会正确处理这些。
    猜你喜欢
    • 2019-04-13
    • 2017-02-15
    • 2019-10-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2021-05-14
    • 2010-09-21
    • 2021-07-27
    相关资源
    最近更新 更多