如何在一个SQL查询中连接两个SELECT语句?
问题描述:
我们怎样才能一次选择两个表,并得到如何在一个SQL查询中连接两个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
我如何可以一次选择两个表中的信息? < ------------------->
答
使用加入
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
你应该加入2点AUTO_INCREMENT的ID,所以你应该创建列 'milk_man_id'在您的借记表中,您将填入来自milk_man_profile的自动增量编号。
在侧面说明。我强烈建议不要在PHP中使用@符号来抑制错误。修复它们,而不是将它们藏在地毯下面。
答
您可以使用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";
答
您可能需要在joins看,而不是工会则还利用准备好的发言中,以防止SQL注入。
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
首先,在http://bobby-tables.com了解SQL注入,并学习如何预防它们。你的代码实际上对于注入是非常开放的,你的数据库可能会在几秒钟内被黑客入侵,而不需要你系统的任何知识。当您在querys中使用来自POST/URL的输入时,请使用始终准备好的语句。顺便说一句,你要找的是'SQL JOIN'功能。谷歌为它,有很多例子。 – Twinfriends
看起来你正在寻找'加入'不是'联盟' – Jens
这听起来像你正在尝试使用JOIN从2个不同的表中收集数据。试用本教程以了解有关JOIN的基础知识:https://www.w3schools.com/sql/sql_join.asp –