【问题标题】:Only select a specific page that has been liked or disliked?只选择一个被喜欢或不喜欢的特定页面?
【发布时间】:2016-12-01 06:58:04
【问题描述】:

我有 3 个表格来存储人们的喜好和喜好:pagespages_likespages_dislikes

现在我想有一个主页来显示一个随机页面,但只显示那些没有被用户喜欢或不喜欢的页面。

这是我的 SQL 语句:

SELECT p.id AS page_id, d.uid AS duid, l.uid AS luid, p.title FROM pages p 
JOIN pages_dislikes d on d.page_id = p.id JOIN pages_likes l on l.page_id = p.id 
WHERE d.uid != '3' AND l.uid != '3'  ORDER BY rand() LIMIT 1

但这仍然显示了一个被喜欢或不喜欢的页面,因为还有其他用户喜欢或不喜欢这个页面:

如何只显示特定用户 ID 尚未喜欢或不喜欢的页面?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您的查询应该是:

    SELECT 
        p.id AS page_id
        ,d.uid AS duid
        ,l.uid AS luid
        ,p.title FROM pages p 
    LEFT JOIN pages_dislikes d on d.page_id = p.id 
    LEFT JOIN pages_likes l on l.page_id = p.id 
    WHERE (d.page_id IS null OR l.page_id is null) AND d.uid != '3' AND l.uid != '3'
    ORDER BY rand() LIMIT 1
    

    你也可以试试这个查询:

    SELECT P.pageid, P.pagename FROM Pages P LEFT JOIN
    (
        SELECT pageid FROM lik WHERE uid <> 3
        UNION 
        SELECT pageid FROM dis WHERE uid <> 3
    ) LikesDislikes ON LikesDislikes.pageid = P.pageid
    ORDER BY rand() LIMIT 1
    

    【讨论】:

    • 但我不希望它为空,我只想排除一个特定的用户 ID (uid),例如我的示例中的用户 ID 3
    • 其实应该是page_id。现在你可以添加任何你想要的条件了。
    • 抱歉,之前没有看到您的编辑。好吧,现在我根本没有得到任何结果,即使一个页面还没有被喜欢或不喜欢
    • 尝试首先运行不带 where 条件的查询。看看你得到了什么以及你得到的 no 或 rows。然后检查 page_id 正在测试 null 的条件,然后继续。
    • 逻辑是首先获取所有未被喜欢和不喜欢的页面。然后根据用户过滤结果。
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多