INNER JOIN后表中的字段无法正确显示 - 未定义索引

时间:2017-03-17 01:34:01

标签: php mysql

好吧,我整个下午/晚上一直试图解决这个问题,我知道我已经接近了......仍然无法做到:/

我有一个数据库(使用phpMyAdmin创建,因为我正在学习使用它),它有主题和职业,以及id,名称,描述等字段。

表主题具有来自表Careers的id和外键(职业的id)。我已经使用关系视图在phpMyAdmin中完成了这个。

然后......我有一个主页面的主要php文件(就像一个“家”),在那里我已经包含了另一个php文件的链接,该文件显示了包含所有主题的表(名称主题,描述,时间,职业和行动)

这是Home.php中的表格部分:

<table class="table table-striped table-bordered table-hover tabla">
                <thead>
                    <tr>
                        <th class="thead_texto">Subject</th>
                        <th class="thead_texto">Description</th>
                        <th class="thead_texto">Hours</th>
                        <th class="thead_texto">Carrer</th>
                        <th class="thead_texto">Actions</th>
                    </tr>
                </thead>
                <tbody><!-- Loop for the subjects -->
                    <?php
                      include("../extras/tablaSubjects.php");
                    ?>
                </tbody>
</table>

这是一个处理显示数据库主题和信息的php文件:

<!-- This comes from another file that have the info for the conection -->
<?php
    include("conexion.php");

//Conection
$CONN = new mysqli($serverName, $username, $password, $dataBase);

//Checking
if ($CONN->connect_error){
    echo("Error de conexion");
}
else{
    echo "Conectado";
}

//Showing the subjects and information

//Query to select
$SQL = "SELECT s.id, s.name, s.description, s.hours, c.name FROM subjects m JOIN careers c ON (s.career_id = c.id)";
$resultado = $CONN->query($SQL);

//Part of the tbody where the loop will be
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){
    echo "<tr>";  
        echo "<td>{$row['s.name']}</td>";
        echo "<td>{$row['description']}</td>";
        echo "<td>{$row['hours']}</td>";
        echo "<td>{$row['name']}</td>";
        echo '<td><a class="btn btn-primary" value="'.$row['id'].'">Edit</a>    <a class="btn btn-danger" value="'.$row['id'].'">Delete</a> </td>';
    echo "</tr>"; 
}
}else{
echo "<tr><td>No data<td></tr>";
}
?>

它实际上工作正常...除非在尝试显示SUBJECTS的名称时:/ 在这部分:

echo "<td>{$row['s.name']}</td>"; --> this gives an error, "Undefined index"
        echo "<td>{$row['description']}</td>";  --> OK, info from SUBJECT
        echo "<td>{$row['hours']}</td>"; --> OK, info from SUBJECT
        echo "<td>{$row['name']}</td>";  --> This displays the name of the CAREER :/

我似乎无法理解为什么它显示来自SUBJECT的所有数据,甚至是CAREER的名称,但不显示SUBJECT的名称:/ 如果我在上面写名字,它仍会显示职业的名称。 如果我写“subject.name”,仍然会说“Undefined index”

2 个答案:

答案 0 :(得分:0)

name中有两个select。丢弃之前的句点和表名。所以,做这样的事情:

SELECT s.id, s.name as s_name, s.description, s.hours, c.name 

然后,您可以在结果集中查找s_name而不是s.name

如果你真的想要s.name,你也可以这样做:

SELECT s.id, s.name as `s.name`, s.description, s.hours, c.name 

请注意,您需要反引号,因为标识符通常不允许使用句号。

答案 1 :(得分:0)

表格前缀不包含在fetch_assoc()返回的关联数组的键中,它们只有列名。因此,如果同时选择s.namec.name,则只会有一个$row['name'],其中包含SELECT列表中的最后一个。{/ p>

要获得两者,您应该给其中一个别名。

$SQL = "SELECT s.id, s.name, s.description, s.hours, c.name AS career_name FROM subjects s JOIN careers c ON (s.career_id = c.id)";

然后,您可以将$row['name']用于s.name,将$row['career_name']用于c.name