在一个php select语句中选择2个表

时间:2013-07-29 19:47:16

标签: php

我在mysql中有两个表

practice_sheetsparent_pin

我想使用一个select语句并从两个表中获取数据。

我试过了

$result = mysqli_query($con,"SELECT * FROM practice_sheets AND parent_pin 
WHERE student_name='$_SESSION[SESS_FIRST_NAME] $_SESSION[SESS_LAST_NAME]'");

还有:

$result = mysqli_query($con,"SELECT * FROM practice_sheets, parent_pin 
WHERE student_name='$_SESSION[SESS_FIRST_NAME] $_SESSION[SESS_LAST_NAME]'");

我之前从未尝试过这样做,之前的解决方案就是我找到的。

更新

我认为如果我包含我的完整代码会有所帮助。表数据将进入我页面上的表格。来自practice_sheets的student_name字段和来自parent_pin的parents_student将匹配。

<?php
$con=mysqli_connect();
// Check connection

if (mysqli_connect_errno()){
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM practice_sheets
                                                    WHERE student_name='$_SESSION[SESS_FIRST_NAME] $_SESSION[SESS_LAST_NAME]'");
$numrows = mysqli_num_rows($result);

if($numrows == 0)                    {
    echo "<div class='alert alert-danger'>";
    echo "No Entries, See your instructor for details.";
    echo "</div>";
} else                    {
    echo "<table class='mws-table table-striped table-hover'>";
    echo "<thead align='center'>";
    echo "<tr>";
    echo "<th>Sheet Number</th>";
    echo "<th>Total Minutes</th>";
    echo "<th>Due Date</th>";
    echo "<th>PIN</th>";
    echo "<th>View</th>";
    echo "</tr>";
    echo "</thead>";
    echo "<tbody align='center'>";
    while($row = mysqli_fetch_array($result)){

        if ($row["total_min"]>=$row["required_min"]) {
            echo "<tr class='success'>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['total_min'] . "</td>";
            echo "<td>" . $row['due_date'] . "</td>";
            echo "<td>" . $row['parent_pin'] . "</td>";
            echo "<td> <a href='account/practiceSheets?id=" . $row["id"] . "&total_min=" . $row["total_min"] ."&due_date=" . $row["due_date"] ."&mon_min=" . $row["mon_min"] ."&tues_min=" . $row["tues_min"] ."&wed_min=" . $row["wed_min"] ."&thurs_min=" . $row["thurs_min"] ."&fri_min=" . $row["fri_min"] ."&sat_min=" . $row["sat_min"] ."&sun_min=" . $row["sun_min"] ."&name=" . $row["student_name"] ."&assignment=" . $row["assignment"] ."&required_min=" . $row["required_min"] ."'> <i class='icon-eye-open'> </i> </a> </td>";
            echo "</tr>";
        } else {
            echo "<tr class='info'>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['total_min'] . "</td>";
            echo "<td>" . $row['due_date'] . "</td>";
            echo "<td>" . $row['parent_pin'] . "</td>";
            echo "<td> <a href='account/practiceSheets?id=" . $row["id"] . "&total_min=" . $row["total_min"] ."&due_date=" . $row["due_date"] ."&mon_min=" . $row["mon_min"] ."&tues_min=" . $row["tues_min"] ."&wed_min=" . $row["wed_min"] ."&thurs_min=" . $row["thurs_min"] ."&fri_min=" . $row["fri_min"] ."&sat_min=" . $row["sat_min"] ."&sun_min=" . $row["sun_min"] ."&name=" . $row["student_name"] ."&assignment=" . $row["assignment"] ."&required_min=" . $row["required_min"] ."'> <i class='icon-eye-open'> </i> </a> </td>";
            echo "</tr>";
        }

    }

    echo "</tbody>";
    echo "</table>";
    mysqli_close($con);
}

?>

2 个答案:

答案 0 :(得分:2)

$result = mysqli_query($con,"SELECT * 
                             FROM practice_sheets, parent_pin 
                             WHERE student_name = parents_student 
     AND student_name='$_SESSION[SESS_FIRST_NAME] $_SESSION[SESS_LAST_NAME]'");

答案 1 :(得分:0)

为WHERE statament使用显式名称,例如

$result = mysqli_query("SELECT student_name.practice_sheets FROM practice_sheets AND parent_pin WHERE student_name.practice_sheets = '{$_SESSION['SESS_FIRST_NAME']} {$_SESSION['SESS_LAST_NAME']}'");

MySQL不会AFAIK自动检查约束的位置,因此考虑到您可能存在冲突的名称。请注意,这仍然是伪代码,您需要相应地更改获取的结果。通常认为明确定义要获取的列是一种好习惯,但也可以使用JOIN。

为了帮助编写更短的代码,您还可以使用表名的缩写,例如

$result = mysqli_query("SELECT student_name.ps AS name, pin.pp AS pin FROM practice_sheets AS ps, parent_pin AS pp WHERE student_name.ps = '{$_SESSION['SESS_FIRST_NAME']} {$_SESSION['SESS_LAST_NAME']}'");

更新

您的更新版本中也存在问题。你调用mysqli_fetch_array,它返回一个有序(即编号)的数组。如果您想使用键控,请使用mysqli_fetch_assoc

只有在查询成功的情况下,您才会关闭MySQL连接。将mysqli_close移到括号外。