【问题标题】:How can I union random selected rows in mysql?如何在 mysql 中联合随机选择的行?
【发布时间】:2018-07-30 11:17:19
【问题描述】:

现在我使用这个代码:

$query = mysqli_query($conn, "(SELECT * FROM movies WHERE
    MATCH(title) AGAINST('".$_SESSION['mtitle']."' WITH QUERY EXPANSION) AND
    id NOT LIKE '".$_SESSION['mid']."')
    UNION
    (SELECT * FROM movies WHERE category LIKE '%".$cat."%' AND
     id NOT LIKE '".$_SESSION['mid']."' ORDER BY RAND()) LIMIT 5");

我想列出 5 部类似的电影。当第一部分有 5 个或更多匹配项时,效果很好。但如果不是,则第二个选择不是随机的,它总是以相同的顺序写入相同的电影。

例如:如果我搜索 Jumanji,第一个建议是 Jumanji,第二个是 Jumanji:Welcome to the Jungle。但最后 3 部始终是同一部电影。

【问题讨论】:

    标签: php mysql session union


    【解决方案1】:

    Group By 认为是您删除任何重复值的答案。

     `GROUP BY mtitle`
    
    "(SELECT mtitle FROM movies WHERE
    MATCH(title) AGAINST('".$_SESSION['mtitle']."' WITH QUERY EXPANSION) AND
    id NOT LIKE '".$_SESSION['mid']."')
    UNION
    (SELECT mtitle FROM movies WHERE category LIKE '%".$cat."%' AND
     id NOT LIKE '".$_SESSION['mid']."') GROUP BY mtitle ORDER BY RAND() LIMIT 5"
    

    【讨论】:

    • 应该是title
    • 不会将 LIMIT 5 放在每个 SELECT 查询中进一步优化它吗?这样单个查询就不会首先获取所有数据,然后对它们进行分组?
    猜你喜欢
    • 2010-11-19
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多