2017-10-04 10 views
-5

Wie können wir zwei Tabelle auswählen auf einmal und die DatenWie werden zwei SELECT-Anweisungen in einer SQL-Abfrage verknüpft?

<?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(); 

?> 

Dann wird folgende Fehler ich erhalten erhalten:

The used SELECT statements have a different number of column

Wie kann ich Informationen aus zwei Tabellen wählen auf einmal? < ------------------->

+1

Zu allererst über SQL-Injection bei http://bobby-tables.com lesen und lernen, wie sie zu verhindern. Ihr Code ist tatsächlich sehr weit offen für die Injektion und Ihre Datenbank kann in wenigen Sekunden ohne Kenntnis Ihres Systems gehackt werden. Bitte verwenden Sie immer vorbereitete Anweisungen, wenn Sie Eingaben von POST/URL in Ihren Abfragen verwenden. Übrigens, was Sie suchen, ist SQL-JOIN-Funktion. Google dafür, es gibt Tonnen von Beispielen. – Twinfriends

+0

Sieht so aus, als ob Sie nach 'join' nicht für' Union' suchen. – Jens

+0

Es klingt, als ob Sie versuchen, einen JOIN zu verwenden, um Daten aus 2 verschiedenen Tabellen zu sammeln. Probieren Sie dieses Tutorial aus, um die Grundlagen zu JOINs zu erlernen: https://www.w3schools.com/sql/sql_join.asp –

Antwort

0

Verwendung tritt

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 

Sie auf 2 auto_increment IDs kommen sollte, so sollten Sie Spalte 'milk_man_id' erstellen in Ihrer Debit-Tabelle, die Sie mit der Autoinkrement-ID aus milk_man_profile füllen werden.

Auf einer Randnotiz. Ich empfehle dringend, niemals das @ -Symbol in PHP zu verwenden, um Ihre Fehler zu unterdrücken. Fix sie, anstatt sie unter dem Teppich zu verstecken.

0

können Sie left join wie folgt verwenden:

$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

Sie könnten joins statt Vereinigung suchen müssen dann auch die Verwendung von vorbereiteten Anweisungen machen gegen SQL-Injektionen zu schützen.

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 
Verwandte Themen