【问题标题】:How to select 1 userID, and not every single one如何选择 1 个用户 ID,而不是每个用户 ID
【发布时间】:2021-06-24 08:51:23
【问题描述】:

目前,这个 .php 文件分配给每个家务活,数据库中存在的每个用户,我认为这是因为它重复,我如何让它只选择 1 个随机用户 ID?

<?php
session_start();
include 'conn.php';
if (!isset($_SESSION['username']) || $_SESSION['type']!="admin") {
      header('location:login.php');
}
$query = $conn->prepare("SELECT * FROM chores ");
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
   $query2 = $conn->prepare("SELECT * FROM users ORDER BY RAND()");
   $query2->execute();
      while ($row2 = $query2->fetch(PDO::FETCH_ASSOC)) {
         $chore_id = $row['chore_id'];
         $user_id = $row2['ID'];
         $status = "Pending";
         $query3 = $conn->prepare("SELECT * FROM split_chores WHERE chore_id_fk = '".$chore_id."' AND user_id_fk = '".$user_id."' ");
         $query3->execute();
         if ($query3->rowCount()==0) {
            $sql = $conn->prepare("INSERT INTO split_chores(chore_id_fk,user_id_fk,status) 
            VALUES (:chore_id,:user_id,:status)");  
            $sql->bindParam(":chore_id",$chore_id); 
            $sql->bindParam(":user_id",$user_id);   
            $sql->bindParam(":status",$status );
            $sql->execute();    

         }
     }
}
echo "<script>alert('Chores have been splitted successfully');
window.location.href='index.php';</script>";
?>

【问题讨论】:

标签: mysql database-design php greatest-n-per-group


【解决方案1】:

这个问题实际上可能属于 StackOverflow,因为它实际上是一个程序编程问题,但我相信您的问题是您的代码基本上是在说 获取所有家务,然后遍历它们,然后对于每件家务,获取所有用户,并遍历它们...。当您的查询使用不带过滤器的 SELECT * 时,基本上会发生这种情况。

虽然您可能不需要进行如此多的迭代,而且 StackOverflow 可能会再次推荐一个更好的修复方法,但您至少还可以通过将 $query2 的结果集减少为仅返回 1 个用户来解决您的问题。方式如下:

$query2 = $conn->prepare("SELECT * FROM users ORDER BY RAND() LIMIT 1");

LIMIT 子句将结果集减少到您指定的记录数(在我上面的示例中只有 1 条记录),这将只返回 1 个 user 并导致您的迭代代码只为 user 循环一次,(但仍会为每个 chore 循环),仅将 1 个随机 user 分配给特定的 chore,而不是分配给所有 chores

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多