嘿伙计们我正在寻找一些方法来搜索多个数据库表而不使用UNION。我的代码非常简单,类似于:
$con = new PDO( DB_HOST, DB_USER, DB_PASS );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql1 = "SELECT * FROM evidence_vin WHERE vin = :vin LIMIT 1";
$sql2 = "SELECT * FROM national_register_sk WHERE vin = :vin LIMIT 1";
$sql = $sql1 . ' UNION ' . $sql2;
$stmt = $con->prepare( $sql ) union ( $sql2 );
$stmt->bindValue( "vin", $this->vin, PDO::PARAM_STR );
$stmt->execute();
echo "<table>";
echo "<th>Progress</th>";
echo "<th>Claim number</th>";
echo "<th>Make</th>";
echo "<th>Status</th>";
echo "<th>View</th>";
echo "<th>Action</th>";
while ($row = $stmt->fetch()){
echo "<tr>";
echo "<td>24</td>";
echo "<td>".$row['claim_number']."</td>";
echo "<td>".$row['license']."</td>";
echo "<td>".$row['country']."</td>";
echo "<td>".$row['vin']."</td>";
echo "<td><a href=\"detail.php?id=".$row["id"]."&action=detail\">detail</td>";
echo "</tr>";
}
}catch(PDOExeption $e){
echo $e->getMessage();
我有一些问题,因为我需要表1中的一些特定数据和表2中的一些特定数据,我不确定我还需要哪一个。 所以我需要一些方法从每个表中获取一行,其中VIN是$ this-&gt; vin。 (vin在两个表中都相同)
P.S。表没有相同数量的列
答案 0 :(得分:1)
看看JOINS: http://www.sitepoint.com/understanding-sql-joins-mysql-database/
如果我理解你的问题应该解决它。
答案 1 :(得分:0)
如果您想从这些表中获取不同的列,只需进行两次查询。似乎只有这样。 此外,如果您希望一行中的所有ingo都在一行中,而不是使用JOINS,那么您需要确保这些VIN列的格式是相同的。
@Martin,对于多个查询:http://php.net/manual/en/mysqli.quickstart.multiple-statement.php,
我知道它的mysqli,但它是我发现的唯一一个 - 这是非常糟糕的做法。
但在你的位置我会做那样的事情:
SELECT * FROM evidence_vin ev LEFT OUTER JOIN national_register_sk nrs ON ev.vin = nrs.vin其中ev.vin =:vin LIMIT 1
但请记住,如果VIN不会出现在第一张桌子中,并且会在第二张表格中,你将无法获得结果。