如何将检索限制为一个用户的 1 个随机作品而不是所有作品


how to limit retrieve to only 1 random work for one user instead of all the works

我有 2 个表 userdatafiles & users,我根据公共 ID 将 2 个表合并在一起,以找到附加到 ID 的相应作品,以下 PHP 代码我从用户那里检索了作品,它工作正常,因为我只想显示每个用户 1 个作品,但是例如,如果用户有 2-3 个作品, 它还将显示不同的工作。

.PHP

<?php
    include 'dbAuthen.php';
    $sql = 'SELECT * FROM userdatafiles JOIN users ON userdatafiles.UserID = users.UserID WHERE Specialisation = "Painting"';
    $result = mysqli_query($con,$sql);  
    if (mysqli_num_rows($result) > 0) {
        // output data of each row
        while($row = mysqli_fetch_assoc($result)) {
            $links[] = array(
                "links" => $row["Link"],
                "caption" => $row["Name"],
            );                  
        }
        shuffle($links);
        echo json_encode($links);   
    } else {
        echo "0 results";
    }
?>

如果我每个用户只上传 1 件作品,上面的代码就可以工作,我应该怎么做来改进代码,以便如果用户有多个作品,它只会显示该用户拥有的众多作品中的随机作品?谢谢。。

使用 rand() 进行随机显示并将限制设置为 1,这样您将获得一条随机记录

ORDER BY RAND() LIMIT 1

因此,您的查询将是:

$sql = 'SELECT * FROM userdatafiles JOIN users ON userdatafiles.UserID = users.UserID WHERE Specialisation = "Painting" ORDER BY RAND() LIMIT 1';

使用 DISTINCT 消除重复的用户 ID:

$sql = 'SELECT DISTINCT(users.UserID),name,link FROM userdatafiles JOIN users ON userdatafiles.UserID = users.UserID WHERE Specialisation = "Painting" ORDER BY RAND()';

或使用分组依据:

$sql = 'SELECT users.UserID,name,link FROM userdatafiles JOIN users ON userdatafiles.UserID = users.UserID WHERE Specialisation = "Painting" GROUP BY UserID ORDER BY RAND()';