2012-09-07 84 views
0

搜索多个表我以前问一个问题MYSQL Searching multiple tables with different columns using LIKEMYSQL按照特定的顺序

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

我也试过把它们放在这个顺序中,而不使用其他的如果:组件,适配器,连接器。但这并不奏效。

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%'"); 
     } 

    } 
    } 
} 
+0

您已开放SQL注入。不要使用'mysql_ *'方法。他们在您的网站上造成一个很大的安全漏洞。使用PDO代替.. –

+0

嘿谢谢你的提示,不知道这个 – Jweb

回答

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

感谢给我一个PDO的例子。你能用我现在的代码给我一个简单的例子吗?即使它可能不安全。我很乐意给你接受的答案 – Jweb

+0

@Jweb我已经用代码更新了答案! –