我有表'A',它有ID,Name,gender,account_number。表B有ID,Name,gender,account_number等。表B存储有关不同帐户用户和号码的所有信息。我希望如果表A中的一行与account_number(例如123456)在一行中匹配表B与相同的account_number然后打印表B中的所有信息。
我尝试过这样做,但它无法正常工作.........
<? php
require_once 'dbconfig.php';
$stmt = $db_con->prepare("SELECT * FROM trans INNER JOIN reg ON reg.Accnumber = trans.Transfer_id ");
$stmt->execute();
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
?>
<tr>
<td height="38"><?php echo $row['re_name']; ?></td>
<td><?php echo $row['Bank_name']; ?></td>
<td><?php echo $row['re_number']; ?></td>
<td>$<?php echo $row['re_amount']; ?></td>
<td><?php echo $row['swift_code']; ?></td>
<td><?php echo $row['t_date']; ?></td>
<td align="center">
<?php
我需要帮助
答案 0 :(得分:0)
你的意思是左联? 选择表A中的所有值,然后只有在表A中才能从表B中获取数据?
SELECT a.*, b.*
FROM a
LEFT JOIN b USING(account_number)
请注意,第一个表应该是数据量较少的表。 如果你有一个小的交易清单,并且你想获得账户持有人的详细信息,那就是:
SELECT *
FROM trans
LEFT JOIN reg ON reg.accnumber = trans.accnumber
WHERE reg.accnumber = '123456'
如果您有客户的名单并希望为他们找到交易:
SELECT reg.*, group_concat(trans.transfer_id)
FROM reg
LEFT JOIN trans USING (accnumber)
GROUP BY reg.accnumber
您可以过滤该数据,但如果您的客户有超过1笔交易,您可能需要使用“已经”而不是“地点”:
SELECT reg.*, count(trans.transfer_id) as qty
FROM reg
LEFT JOIN trans ON reg.accnumber = trans.accnumber
GROUP BY reg.accnumber
HAVING reg.accnumber = '123456'
如果您只需要交易,可以从一个表中请求:
SELECT * FROM trans WHERE accnumber = '123456'
如果你的表是规范化的,你不应该在你的trans表中有accnumber字段,这是reg.id的唯一外键,那么你的查询将是:
SELECT trans.*
FROM trans
LEFT JOIN reg ON reg.id = trans.user_id
WHERE reg.accnumber = '123456'