从表1中获取申请者,使用PHP比较id并从表2中获取用户详细信息

从表1中获取申请者,使用PHP比较id并从表2中获取用户详细信息,php,database,mysqli,Php,Database,Mysqli,好的,我有两张桌子 申请人列表-显示所有申请人 用户表 现在我通过Post方法提供news\u id,我想列出所有用户(电子邮件、手机、用户名)的详细信息,其中user\u authToken和user\u authToken的值相同。有人能用PHP帮我解决这个逻辑吗 $job_id = $_POST['job_id']; $resultSet = $con->query("SELECT appliers_list.news_id AS jobid ,

好的,我有两张桌子

  • 申请人列表-显示所有申请人
  • 用户表
  • 现在我通过Post方法提供
    news\u id
    ,我想列出所有
    用户(电子邮件、手机、用户名)
    的详细信息,其中user\u authToken和user\u authToken的值相同。有人能用PHP帮我解决这个逻辑吗

           $job_id = $_POST['job_id'];
           $resultSet = $con->query("SELECT appliers_list.news_id  AS jobid ,
           appliers_list.user_authToken AS user,
           user.user_name AS username,
           user.mobile AS mobile,
           FROM appliers_list,user 
           WHERE  appliers_list.news_id = '$job_id'
           ORDER BY appliers_list.id DESC
           ");
           $rows = $resultSet->fetch_assoc();
    

    您可以使用left join从两个表中获取记录:

           $job_id = !empty($_POST['job_id']) ? intval($_POST['job_id']) : 0;
           $resultSet = $con->query("SELECT appliers_list.*,users.email
           FROM appliers_list 
           left join users on appliers_list.user_authToken  = users.user_authToken
           WHERE news.news_id = '$job_id'
           ORDER BY news.id DESC
           ");
           $rows = $resultSet->fetch_assoc();
    

    您没有指定
    user
    appliers\u列表
    表之间的关系,因此您将获得
    user
    中的所有行。在
    SELECT
    列表的末尾还有一个额外的逗号

       $job_id = $_POST['job_id'];
       $resultSet = $con->query("SELECT appliers_list.news_id  AS jobid ,
       appliers_list.user_authToken AS user,
       user.user_name AS username,
       user.mobile AS mobile
       FROM appliers_list
       JOIN user ON appliers_list.user_authToken = user.user_authToken
       WHERE  appliers_list.news_id = '$job_id'
       ORDER BY appliers_list.id DESC
       ");
       $rows = $resultSet->fetch_assoc();
    
    • 首先,你的名字很不一致,很难阅读和理解

    • 第二,请使用prepare语句,否则将打开系统进行SQL注入

      $news_id = $_POST['job_id'];
      
      $stmt = $con->prepare("SELECT email, mobile, user_name
      FROM users 
      WHERE user_authtoken in (select user_authToken from appliers_list where news_id = ?)");
      $stmt->bind_param("i", $news_id);
      $stmt->execute();
      $resultSet = $stmt->get_result();
      
      while($row = $resultSet->fetch_assoc()) {
      // data manipulation here
      }
      

    这不只是一个使用
    user\u authtoken
    列的简单连接吗?我尝试过,但它在表中列出了所有结果如何显示您的尝试,以便我们可以看到您做错了什么并帮助您修复。我已经编辑了我尝试的内容,检查我的查询,请告诉我我做错了什么您忘了加入
    user
    表,显然。为什么要使用左连接而不是内部连接?我认为可能会有来自同一用户的多条新闻,所以我们的目标是获取主要数据是新闻,然后用户详细信息是次要的。内部连接将返回多行。left join的唯一区别是它将返回没有匹配用户的新闻项。是的,它们都显示来自两个表的记录。但左连接也会显示不在两个表中的记录。如果我必须从另一个表中的“profile\u url”列中获取一个值,其中公共值为“user\u authoken”,并合并所有结果,那么应该使用
    join
    连接3个表