0

我之前问过一个问题MYSQL Searching multiple tables with different columns using LIKE

我无法获得帮助:所以我妥协了。现在,如果一个人进行搜索并在多个表中找到它,它不会按照我想要的顺序搜索它们。我希望结果首先来自连接器表,然后是适配器表,然后是组件表。如果在连接器中找到结果,请不要搜索适配器或组件,继续。

我还尝试将它们按此顺序排列,而不使用 else if:组件、适配器、连接器。但这没有用。

if(isset($_GET['num'])) {
$num = $_GET['num'];
$numresult = mysql_query("SELECT * FROM productnumber WHERE part_num LIKE '%$num%'");

  if ($numresult) {

    while ($row = mysql_fetch_array($numresult)) {

        if ($row["title"] == "connectors") {
            $numtitle = "connectors";
            $result = mysql_query("SELECT * FROM connectors WHERE part_num LIKE '%$num%'");
        } else if ($row["title"] == "adapters") {
            $numtitle = "adapters";
            $result = mysql_query("SELECT * FROM adapters WHERE part_num LIKE '%$num%'");
        } else if ($row["title"] == "components") {
            $numtitle = "components";
            $result = mysql_query("SELECT * FROM components WHERE part_num LIKE '%$num%'");
        }   

    }
  }
}
4

1 回答 1

1

这是使用这些mysql_*方法的代码:如果没有找到,该代码将在连接器中搜索,然后在适配器中搜索,依此类推。但是根据您的要求,如果它在连接器中找到了某些东西,它将不会检查适配器或组件!

<?php
if(isset($_GET['num'])) {
$num = $_GET['num'];
    // We will first search for connectors
    $result = mysql_query("SELECT * FROM connectors WHERE part_num LIKE %'$num'%");
    if(mysql_num_rows($result) == 0) {
    // Now if we don't find anything in connectors, we will search in adapters
    $result = mysql_query("SELECT * FROM adapters WHERE part_num LIKE %'$num%'%");
    if(mysql_num_rows($result) == 0 ){
    // And if we don't find anything in adapters, finally we will search in components
    $result = mysql_query("SELECT * FROM components WHERE part_num LIKE %'$num%'%"); 
    if(mysql_num_rows($result) == 0) {
        echo "We Found Nothing! :( "
    }
    }}
}
?>

这是转换为 PDO 的示例代码(只是您的代码)。但不是您问题的正确答案。

 <?php
    try {
        $conn = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $qry = $conn->prepare('SELECT * FROM productnumber WHERE part_num LIKE %:part_num%');
        $qry->execute(array(':part_num'=>$_GET['num']));
        $row = $qry->fetch(PDO::FETCH_OBJ)
            switch ($row->title) {
                case 'connectors':
                $numtitle="connectors";
                $qry2=$conn->prepare('SELECT * FROM connectors WHERE part_num LIKE %:num%');
                $qry2->execute(array(':num'=>$_GET['num'])));
                break;
                case 'adapters':
                $numtitle="adapters";
                $qry2=$conn->prepare('SELECT * FROM adapters WHERE part_num LIKE %:num%');
                $qry2->execute(array(':num'=>$_GET['num'])));
                break;
                case 'components':
                $numtitle="components";
                $qry2=$conn->prepare('SELECT * FROM components WHERE part_num LIKE %:num%');
                $qry2->execute(array(':num'=>$_GET['num'])));
                break;
            }
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
    ?>
于 2012-09-07T06:53:25.160 回答