PHP 具有 2 个内部联接的 PDO。如何在 php 中区分它们

PHP PDO with 2 inner joins. How to differentiate between them in php

您好,我有以下代码。

try {
    $conn = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $get_member_data = $conn->prepare("SELECT T.trip_id, T.trip_destination, T.trip_leaderid, T.trip_driverid, T.trip_datedeperting, T.trip_datereturning, T.trip_timedeperting, T.trip_timereturning, L.member_surname, D.member_surname FROM trip AS T INNER JOIN members AS L ON L.member_id = T.trip_leaderid INNER JOIN members AS D ON D.member_id = T.trip_driverid");
    $get_member_data->execute();
    while( $row = $get_member_data->fetch(PDO::FETCH_ASSOC) ) { ?>
<tr>
    <td><?php echo $row['trip_id']; ?></td>
    <td><?php echo $row['trip_destination']; ?></td>
    <td><?php echo $row['L.member_surname']; ?></td>
    <td><?php echo $row['D.member_surname']; ?></td>
    <td><?php echo $row['trip_datedeperting']; ?></td>
    <td><?php echo $row['trip_datereturning']; ?></td>
    <td><?php echo $row['trip_timedeperting']; ?></td>
    <td><?php echo $row['trip_timereturning'];?></td>
</tr>

试图抓取 2 个不同的成员姓氏并显示在同一 table 行中。使用此代码,我没有显示姓氏。如果我去掉 L. 和 D. 它只会显示第二个成员的名字两次。

MySQL 允许您为选定字段设置别名:

SELECT ... , L.member_surname AS `somealias1`, D.member_surname AS `somealias2`...

您可以在查询中设置 2 个不同的列,例如 L.member_surname l_member_surname, D.member_surname d_member_surname,,其中 l_member_surnamed_member_surname 是新的列名称。稍后在 php 代码中调用这些列:

    <td><?php echo $row['l_member_surname']; ?></td>
    <td><?php echo $row['d_member_surname']; ?></td>

因此您的代码将是:

try {
    $conn = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $get_member_data = $conn->prepare("SELECT T.trip_id, T.trip_destination, T.trip_leaderid, T.trip_driverid, T.trip_datedeperting, T.trip_datereturning, T.trip_timedeperting, T.trip_timereturning, L.member_surname l_member_surname, D.member_surname d_member_surname FROM trip AS T INNER JOIN members AS L ON L.member_id = T.trip_leaderid INNER JOIN members AS D ON D.member_id = T.trip_driverid");
    $get_member_data->execute();
    while( $row = $get_member_data->fetch(PDO::FETCH_ASSOC) ) { ?>
<tr>
    <td><?php echo $row['trip_id']; ?></td>
    <td><?php echo $row['trip_destination']; ?></td>
    <td><?php echo $row['l_member_surname']; ?></td>
    <td><?php echo $row['d_member_surname']; ?></td>
    <td><?php echo $row['trip_datedeperting']; ?></td>
    <td><?php echo $row['trip_datereturning']; ?></td>
    <td><?php echo $row['trip_timedeperting']; ?></td>
    <td><?php echo $row['trip_timereturning'];?></td>
</tr>