[英]2 columns on a left join
Hello so I have 2 tables. 您好,我有2张桌子。 tbl_records
and tbl_guards
. tbl_records
和tbl_guards
。 On tbl_guards
I have guard_id and on tbl_records
I have guard_id
and guard_id_in
. 在tbl_guards
我有guard_id,在tbl_records
我有guard_id
和guard_id_in
。 And here is my current code: 这是我当前的代码:
try
{
$stat = "0";
$query = "SELECT rec.*, tbl_guard.fname, tbl_guard.lname
FROM tbl_records as rec
LEFT JOIN tbl_guard ON tbl_guard.guard_id = rec.guard_id
LEFT JOIN tbl_records ON tbl_records.guard_id_in = tbl_guard.guard_id
WHERE rec.stud_id=? AND rec.status=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $_GET['id']);
$stmt->bindParam(2, $stat);
$stmt->execute();
echo "<table cellpadding='3' class='searchTbl'>";
echo "<thead>";
echo "<tr>";
echo "<th>Actual Date</th>";
echo "<th>Purpose</th>";
echo "<th>Destination</th>";
echo "<th>Exact TO</th>";
echo "<th>Expected TI</th>";
echo "<th>Guard</th>";
echo "<th>Actual TI</th>";
echo "<th>Guard IN</th>";
echo "</tr>";
echo "</thead>";
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
extract($row);
$guard = $fname . " " . $lname;
echo "<tbody>";
echo "<tr>";
echo "<td>$act_date</td>";
echo "<td>$purpose</td>";
echo "<td>$destination</td>";
echo "<td>$exact_timeout</td>";
echo "<td>$exp_timein</td>";
echo "<td>$guard</td>";
echo "<td>$act_timein</td>";
echo "<td>$guard</td>";
echo "</tr>";
echo "</tbody>";
}
}
catch (PDOException $e)
{
echo "Error: " . $e->getMessage();
}
echo "</table>";
Here is tbl_records
data. 这是tbl_records
数据。 And here is tbl_guard
data. 这是tbl_guard
数据。 Here is the current output. 这是当前输出。
My problem is it shows the same guard in guard_id
and guard_id_in
in my code. 我的问题是它在我的代码中的guard_id
和guard_id_in
中显示了相同的警卫。
You can use LEFT JOIN
multiple times, like: 您可以多次使用LEFT JOIN
,例如:
SELECT tbl_records.*, tbl_guard.fname, tbl_guard.lname
FROM tbl_records as rec
LEFT JOIN tbl_guard ON tbl_guard.guard_id = rec.guard_id
LEFT JOIN tbl_records ON tbl_records.guard_id_in = tbl_guard.guard_id
You can use:
SELECT tbl_records.*, tbl_guard.fname, tbl_guard.lname
FROM tbl_records
LEFT JOIN tbl_guard ON (tbl_records.guard_id OR tbl_records.guard_id_in) = tbl_guard.guard_id
Just to be sure, your tbl_records table can have a link to two different tbl_guards via guard_id and guard_id_in ? 可以肯定的是,您的tbl_records表可以通过guard_id和guard_id_in链接到两个不同的tbl_guards?
Maybe you can try : 也许您可以尝试:
SELECT tbl_records.*, tbl_guard.fname, tbl_guard.lname FROM tbl_records LEFT JOIN tbl_guard ON tbl_guard.guard_id IN (tbl_records.guard_id, tbl_records.guard_id_in)
SELECT tr1
.*, tg1
. 选择tr1
。*, tg1
。 fname
, tg2
.lname FROM tbl_records
AS tr1
LEFT JOIN tbl_guard
AS tg1
ON tg1
. fname
, tg2
.lname FROM tbl_records
AS tr1
左联接tbl_guard
AS tg1
ON tg1
。 guard_id
= tr1
. guard_id
= tr1
。 guard_id
, LEFT JOIN tbl_guard
AS tg2
ON tg2
. guard_id
,左加入tbl_guard
AS tg2
ON tg2
。 guard_id
= trl
. guard_id
= trl
。 guard_id_in
You should select twice the guard table and use aliases for your fields : 您应该选择两次保护表,并对字段使用别名:
SELECT tr1.*, tg1.fname AS FNAME, tg1.lname AS LNAME,
tg2.fname AS FNAME_IN, tg2.lname AS LNAME_IN
FROM tbl_records AS tr1
LEFT JOIN tbl_guard AS tg1
ON tg1.guard_id = tr1.guard_id,
LEFT JOIN tbl_guard AS tg2
ON tg2.guard_id = trl.guard_id_in
then in PHP you'll have more vars : $FNAME, $LNAME, $FNAME_IN, $LNAME_IN 那么在PHP中您将拥有更多的变量:$ FNAME,$ LNAME,$ FNAME_IN,$ LNAME_IN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.