我有 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()';