我之前问过一个问题MYSQL使用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%'");
}
}
}
}
这是使用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();
}
?>