【问题标题】:How to fetch and echo the results of a JOIN in PHP如何在 PHP 中获取和回显 JOIN 的结果
【发布时间】:2018-04-11 03:23:11
【问题描述】:

few weeks ago 此处发布了一个问题的重新发布,我仍在努力解决这个问题。

所以我要做的就是显示创建作业的人的用户名,以显示在这样的页面上:https://vloggi.com/commission/21

目前在控制器页面我有以下查询:

$sql = "SELECT * FROM users_gor WHERE usrg_usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users_gor = $rows[0];

$sql = "SELECT * FROM users_vgr WHERE usrv_usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users_vgr = $rows[0];

$sql = "SELECT * FROM users WHERE usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users = $rows[0];

$sql = "SELECT * FROM vlog-ops WHERE vlop_usr_id ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users = $rows[0];

$sql = "SELECT usr_name AS vlop_usr_name FROM users WHERE usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$result = mysql_query($sql);        
$row = mysql_fetch_array($result);


$sql = "SELECT usr_name  FROM users WHERE usr_id='".$db->quote($user_info['usr_id'])." LIMIT 1";
$creator = $db->select1($sql);
$users = $rows[0];

$query = "SELECT u.usr_name, g.usrg_orgname, v.vlop_usr_id  FROM users u 
JOIN vlog-ops v on u.usr_id = v.vlop_usr_id 
JOIN users_gor g on u.usr_id = g.usrg_usr_id";

然后在模板页面中,我有以下 fetch 和 echo。

             <?php
             $result = mysqli_query($connection, $query);
             while($row = mysqli_fetch_assoc($result)) {
                 echo 'User name = ' . $row['u.usr_name'];
                 echo 'Org name = ' . $row['g.usrg_orgname'];
                 echo 'Job posting user id = ' . $row['v.vlop_usr_id'];
             }
             ?>   

但它不起作用。我尝试了 Paulo Hgo 的代码,它也不起作用。

所以我了解 JOIN 的基本概念,但需要一些帮助来实际回显或打印变量。

很抱歉重新发布。

【问题讨论】:

  • 您问的是 SQL 问题还是 PHP? SQL 查询是否返回任何结果?

标签: php sql mysqli echo


【解决方案1】:

首先,您错误地检索了列,生成的关联数组不包含 u.usr_name 或 u.anyfields 等字段的任何点 (.),它将返回实际的表字段。要检查关联数组中的行,您可以像下面那样打印它(只是为了查看生成的结构或数组键)

<?php
    $result = mysqli_query($connection, $query);
    while($row = mysqli_fetch_assoc($result)) {
      echo '<pre>';
      print_r($row);
      echo '</pre>';
      die(); //just return 1 iteration.
    }
 ?>  

输出如下:

Array
(
    [usr_name] => john
    [usrg_orgname] => doe
    ...
)

然后你可以直接引用它的字段/键。如果每个表中都有同名的字段,请使用字段别名。

使用实际的字段名称修复您的上述代码,请参见下文:

<?php
$result = mysqli_query($connection, $query);
if($result) {
   while($row = mysqli_fetch_assoc($result)) {
     echo 'User name = ' . $row['usr_name'];
     echo 'Org name = ' . $row['usrg_orgname'];
     echo 'Job posting user id = ' . $row['vlop_usr_id'];
   }
} else {
   echo 'Something went wrong.'; 
}
?>  

【讨论】:

  • 嗨,@imprezzeb。谢谢,但我不太确定在哪里添加该代码。在查询或回声中。抱歉,这很明显。
  • @JustinWastnage,我上面的代码仅供您参考,您可以将其添加到 while 循环中,但要修复您的代码,您需要删除“u”。在 u.usr_name 中,在这种情况下只使用实际的字段名称 usr_name。
  • 嗨@imprezzeb。它仍然无法正常工作。我一遍又一遍。当我将回显代码插入模板页面时,没有任何效果,当我将整个代码插入主页时,整个站点都变为空白。我可以让代码在 SQL 中工作。
  • 请像上面一样添加结果检查。这是为了检查您的 sql 查询是否确实返回了结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
相关资源
最近更新 更多