我正在尝试为我的网页开发搜索功能。 数据库中的某些列存储为表示值的整数。 我有一个函数在返回结果时显示这些:
public function listsystypestatus($sysobj){
if ($this->sysobj ==='1') return "Core";
if ($this->sysobj ==='2') return "Aggregation";
if ($this->sysobj ==='3') return "Core/Aggr";
if ($this->sysobj ==='4') return "Customer";
if ($this->sysobj ==='5') return "TX Site";
return "--Please Select--";
我希望能够搜索此列并返回结果。 例如,在“Cus”上搜索通配符,并返回在此列的数据库中存储为“4”的所有记录。 我不知道如何处理这个问题。
我的搜索查询适用于其他(字符串)字段:
if($action=='search' && $search!=NULL){
$wildsearch = "%%$search%%";
$query = "SELECT *, INET_NTOA(ip_add) AS ip_add
FROM `equipment`
LEFT JOIN itam_asset on equipment.itamname=itam_asset.ASSETID
WHERE site_code LIKE :search
OR site_id LIKE :search
OR system_name LIKE :search
OR INET_NTOA(ip_add) LIKE :search
OR sys_loc LIKE :search
OR systype LIKE :search
OR itamname LIKE :search
OR dimetis LIKE :search
OR DNS LIKE :search
";
//Get equipment data
//select and prepare
$database->query($query);
//Bind
$database->bind(':search',$wildsearch);
}else{
....
....
Display results
我用来显示返回结果的代码是:
<?php
foreach($rows as $row){
//extract row
//this will make $row['firstname'] to
//just $firstname only
extract($row);
...
...
echo reults
...
...
感谢所有人。
编辑: 新查询 - 现在有效:
$query = "SELECT *, INET_NTOA(ip_add) AS ip_add, list_systype.systype_label
FROM `equipment`
LEFT JOIN itam_asset on equipment.itamname=itam_asset.ASSETID
LEFT JOIN list_systype on equipment.systype=list_systype.systype_value
WHERE site_code LIKE :search
OR site_id LIKE :search
OR system_name LIKE :search
OR INET_NTOA(ip_add) LIKE :search
OR sys_loc LIKE :search
OR list_systype.systype_label LIKE :search
OR itamname LIKE :search
OR dimetis LIKE :search
OR DNS LIKE :search
";
答案 0 :(得分:0)
如果我理解你,如果您搜索“Cus”,则需要搜索“4”,因为“{4”在您的listsystypestatus
功能中是“客户”。为此,您需要:
在主题2上,您可以限制查询以搜索sysobj字段。
我会稍微改写你的listsystypestatus
逻辑,所以你可以重复使用它进行搜索。
class Test {
// Your type
private $systypes = array('1' => 'Core', '2' => 'Aggregation', '3' => 'Core/aggr', '4' => 'Customer', '5' => 'TX Site');
public function listsystypestatus($sysobj) {
var_dump(array_key_exists($sysobj, $this->systypes));
if(array_key_exists((int)$sysobj, $this->systypes)) {
return $this->systypes[$sysobj];
}
return "--Please Select--";
}
// Retrieve the type
public function gettype($search) {
$matches = array_filter($this->systypes, function($text) use ($search) {
return ( strpos($text, $search) !== false );
});
return array_keys($matches);
}
}
$test = new Test();
// Retrieving records for 'Cus' (only one, 4)
var_dump($test->gettype('Cus'));
// Few more hits now
$result = $test->gettype('C');
var_dump(implode(',', $result));
使用生成的数组,您可以决定在SQL查询中要执行的操作。例如,对数组中的所有值或类似的值执行IN(1,2,3)。