2017-09-26 8 views
0

私はID、名前、性別、account_numberを持つテーブル 'A'を持っています。テーブルBにはID、名前、性別、account_numberなどがあります。表Bには、異なるアカウントのユーザーと番号に関するすべての情報が格納されています。 account_numberのようなテーブルAの行、例えば123456が行内で一致する場合は、同じaccount_numberを持つテーブルBがすべて一致していれば、テーブルBのすべての情報が表示されます。表Aのフィールドに列番号2345678などの列がある表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

、あなたはACCOUNT_NUMBERと表Aの行ならば、「私が欲しい' LEFT JOIN' – Camille

+0

@Camilleで試してみてくださいB.と少なくとも一つの試合を持っている人のリストだけを持っています例:123456は、同じaccount_numberを持つ表Bの行を照合し、表Bのすべての情報を出力します。これは私の内なるジョインの問題のように聞こえます。 –

+0

私はあなたが 'tableB. * SELECT TABLEB。* FROM tableA INNER JOIN tableB USING(account_number)WHERE account_number = '123456'を使う必要があると思います。私は不明な点がありますが、サンプルテーブル、サンプルデータ、期待される結果がないことを意味します。 –

答えて

0

を助けが必要てください? テーブルAからすべての値を選択し、テーブルAにある場合にのみテーブルBからデータを取得しますか?

SELECT a.*, b.* 
FROM a 
LEFT JOIN b USING(account_number) 

注目すべきは、第1のテーブルは、データが少ないテーブルである必要があります。 あなたは小さなトランザクションリストを持っていて、それのためのアカウントの所有者の詳細を取得したい場合は、それは次のようになります。

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件の以上の取引があれば持っ代わりにどこの使用する必要があります:あなたがOを必要とする場合

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' 

そして、あなたのテーブルが正規化されている場合、あなたは、あなたのトランスの表にreg.idする唯一の外部キーをaccnumberフィールドを持つべきではありません

、その後、あなたのクエリは次のようになります。NLYトランザクションは、1つのテーブルからそれを要求することができます: `INNER JOIN`で

SELECT trans.* 
FROM trans 
LEFT JOIN reg ON reg.id = trans.user_id 
WHERE reg.accnumber = '123456' 
+0

私が意味するところは、 'reg'というテーブルAには、アカウント番号を持つすべての登録ユーザが含まれ、テーブルBにはすべてのユーザのすべての転送トランザクションが含まれています。ユーザーがログインすると、他の人のトランザクションを見ずにこのトランザクションをすべて表示します。だから、私は列名 'Accnumber'を 'reg'テーブルのAとテーブルBの列名 'transfer_id'はテーブル 'トランス' –

+0

ですそれは通常、テーブルのトランスをAccnumberでフィルタリングするだけで十分です SELECT * FROM trans WHERE accnumber = '123456' –

+0

いいえ動作しています...私は試しました –

関連する問題