PHP / SQL - 多表搜索

时间:2014-08-14 09:55:17

标签: php mysql sql

嘿伙计们我正在寻找一些方法来搜索多个数据库表而不使用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。表没有相同数量的列

2 个答案:

答案 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不会出现在第一张桌子中,并且会在第二张表格中,你将无法获得结果。