2017-10-04 6 views
-5

はどのように我々は一度に2つのテーブルを選択して取得することができます1つのSQLクエリで2つのSELECT文を結合するには?

<?php 
$id= null; 
@$id = $_REQUEST['id']; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT ID, name, gender, age, contact, village, town, id_proof, id_proof_no, reg_date 
FROM milk_man_profile WHERE ID=$id 
UNION 
SELECT date, time, amount, particular FROM debit WHERE ID=$id"; 

$result = $conn->query($sql); 

if (@$result->num_rows > 0) { 

    // output data of each row 
    while($row = $result->fetch_assoc()) { 
    echo "<h3 style='text-align: center; font-family: verdana;'>Profile Details</h3>"; 
    echo "<form action='milk_edit_profile.html?id=$id' method='get'><div class='container'><div class='table-reponsive text-center'><table class='table table-bordered table-striped'> 
     <tr><th>ID:</th><td class='text-center'><input readonly style='text-align: center; border: 0px solid;' type='text' name='id' value='".$row['ID']."'></td></tr> 
     <tr><th>Name:</th><td>".$row['name']."</td></tr> 
     <tr><th>Reg. Date:</th><td>".$row['reg_date']."</td></tr> 
     <tr><th>Age (Reg. Date)</th><td>".$row['age']."</td></tr> 
     <tr><th>Gender:</th><td>".$row['gender']."</td></tr> 
     <tr><th>Contact No:</th><td>".$row['contact']."</td></tr> 
     <tr><th>Village:</th><td>".$row['village']."</td></tr> 
     <tr><th>Town:</th><td>".$row['town']."</td></tr> 
     <tr><th>".$row['id_proof']." No:</th><td>".$row['id_proof_no']."</td></tr> 
    <tr><td colspan='2' class='text-center'><button type='submit' class='btn btn-info'>Edit Details <span class='glyphicon glyphicon-edit'></span></button></td> 
    </tr></table></div></div></form><br/> 

    <div class='container'> 
    <div class='table-responsive'> 
     <table class='table table-bordered table-striped'> 
     <th class='text-center'><b>Date & Time</b></th> 
     <th class='text-center'><b>Type</b></th> 
     <th class='text-center'><b>Amount</b></th> 
     </table> 
    </div> 
    </div> 
     <div class='text-center'> 
     <form action='/milk_e_ledger/debit.html?'> 
     <input type='hidden' name='debiter_name' method='get' value='".$row['name']."'> 
     <input type='hidden' name='id' method='get' value='$id'> 
     <br/> 
     <button class='btn btn-danger'>Debit Money <span class='glyphicon glyphicon-usd'></span></button></form></div><br/>"; 
} 
} 
else { 
    echo("Error description: " . mysqli_error($conn)); 
    } 
$conn->close(); 

?> 

は、その後、私は次のエラーが表示されたデータ:

The used SELECT statements have a different number of column

どのように私は一度に2つのテーブルから情報を選択することができますか? < ------------------->

+1

まず第一に、http://bobby-tables.comでSQLインジェクションについて読み、それらを防ぐ方法を学びます。あなたのコードは実際には非常に広く注入されており、データベースを何も知らなくても数秒でハッキングすることができます。クエリーでPOST/URLからの入力を使用する場合は、常に準備済みのステートメントを使用してください。 Btw、あなたが探しているのは 'SQL JOIN'関数です。 Googleには、たくさんの例があります。 – Twinfriends

+0

あなたは 'Union'のために' join'を探しているように見えます – Jens

+0

JOINを使って2つのテーブルからデータを集めようとしているようです。このチュートリアルを試して、JOINについての基礎を学びましょう。https://www.w3schools.com/sql/sql_join.asp –

答えて

0

使用すると、あなたが列 'milk_man_id' を作成する必要がありますので、あなたは、2 AUTO_INCREMENT ID年代に参加する必要があります

https://dev.mysql.com/doc/refman/5.7/en/left-join-optimization.html

SELECT ID, name, gender, age, contact, village, town, id_proof, id_proof_no, reg_date 
    FROM milk_man_profile LEFT JOIN debit ON milk_man_profile.id = debit.id WHERE milk_man_profile.ID=$id 

に参加しますあなたのデビットテーブルに、milk_man_profileからの自動インクリメントIDで記入します。

サイドノートです。あなたのエラーを抑制するために@記号をPHPで使用しないことを強くお勧めします。カーペットの下に隠す代わりに、それらを修正します。

0

あなたはこのようleft joinを使用することができます。

$sql = "SELECT mp.ID, mp.name, mp.gender, mp.age, mp.contact, mp.village, mp.town, mp.id_proof, mp.id_proof_no, mp.reg_date, db.date, db.time, db.amount, db.particular 
FROM milk_man_profile as mp LEFT JOIN debit as db ON db.ID = mp.ID db.date, db.time, db.amount, db.particular WHERE mp.ID=$id"; 
0

あなたは、その後も、SQLインジェクションに対して保護するために準備された文を利用する代わりに、労働組合のjoinsを見てする必要がある場合があります。

How can I prevent SQL injection in PHP?

<?php 

$sql = "SELECT ID,name,gender,age, contact,village,town,id_proof,id_proof_no,reg_date,DATE,TIME,mount,particular FROM milk_man_profile JOIN debit USING(ID) WHERE milk_man_profile.ID = ?)"; 

$result = $conn->prepare($sql); 
$result->bind_param("i",$id); 
$result->execute(); 

//fetch the results 
関連する問題