使用php数组进行类似mysql的搜索
我有一个只有几列的小表,其中一个是将关于类别的信息存储为一个INT,只是一个简单的数字,例如使用php数组进行类似mysql的搜索,php,mysql,arrays,sql-like,Php,Mysql,Arrays,Sql Like,我有一个只有几列的小表,其中一个是将关于类别的信息存储为一个INT,只是一个简单的数字,例如 id | name | category 11 | one file | 1 15 | some other file | 2 在显示站点上的数据时,我只需将类别的编号与PHP数组中存储的值进行转换: $swm_array = array( '1' => 'Electrical', '2' => 'HVAC', '3' => 'Plu
id | name | category
11 | one file | 1
15 | some other file | 2
在显示站点上的数据时,我只需将类别的编号与PHP数组中存储的值进行转换:
$swm_array = array(
'1' => 'Electrical',
'2' => 'HVAC',
'3' => 'Plumbing',
);
使用LIKE运算符搜索表格时,如果键入一个数字,我可以很容易地找到类别。我需要的是实际键入类别的值,而不是它的键,然后根据表中的条目找到它。我一直在尝试使用完全奇怪的东西将数组包含到搜索中,但没有效果
在这些论坛中,我发现了一条线索:在查询中内爆,但我无法拉出来
如果你们能帮我,我将永远感激你们:
我的SQL查询:
SELECT DISTINCT
`swm_id`,
`name`,
`desc1`,
`category`,
`file`
FROM
`swims`
WHERE
(
`name` LIKE '%".$q."%'
OR `desc1` LIKE '%".$q."%'
OR `file` LIKE '%".$q."%'
OR `swm_id` LIKE '%".$q."%'
**OR `category` LIKE '%".$q."%'**
)
AND `active` = '1'
谢谢,非常感谢
问候,,
Greg在查询之前,在php中:
$r = array_search($q, $swm_array);
然后在您的查询中:
**OR `category` = '".$r."'**
请注意,这不会像MySQL一样工作,只有在您不键入完整类别时才起作用。如果您打算使用逗号分隔列表进行SQL查询,则内爆将是一个很好的解决方案,但由于您使用的是LIKE,因此不会起作用
类似于这里的解决方案的正则表达式可以工作:
但是你已经在一个数组中拥有了你需要的东西;不妨在其上循环并创建查询:
$sqlLikes = " 1=1 ";
foreach($swm_array as $swm) {
$sqlLikes .= " OR `name` LIKE '%".$swm."%'
OR `desc1` LIKE '%".$swm."%'
OR `file` LIKE '%".$swm."%'
" ;
}
这将为您提供$sqllike,如下所示:
然后你可以:
SELECT DISTINCT
`swm_id`,
`name`,
`desc1`,
`category`,
`file`
FROM
`swims`
WHERE
(
$sqlLikes
)
AND `active` = '1'
我还需要搜索类别,类别存储在
DB作为一个数字。因此,我需要翻译搜索字符串
输入一个数字,如电气输入1,暖通空调输入2,管道输入3等
推荐的方法是创建一个类别表,并将您在此处列出的表的类别条目设置为该表的外键。这样,您就可以连接这两个表,并从category表中搜索name属性
除此之外,您可以创建阵列的反向映射。使用原始阵列:
$swm_array = array(
'1' => 'Electrical',
'2' => 'HVAC',
'3' => 'Plumbing',
);
你可以翻转它,这样你就有了一个反向地图
$swm_flipped_map = array_flip($swm_array);
这将产生:
[
'Electrical' => '1',
'HVAC' => '2',
'Plumbing' => '3',
]
通过这种方式,您可以返回与该类别关联的数字,就像通过键在任何数组中查找项目一样。例如:
$electrical_num = $swm_flipped_map['Electrical'];
这将返回“1”。只需使用您已经熟悉的WHERE和OR语句将其合并到查询中即可 我建议您为类别创建另一个表,该表由您正在使用的类别编号键入,并包含类别名称。然后,您可以根据该类别表加入游泳表,并从中检查类别名称。您好,谢谢您的输入!问题是我还需要搜索Category,并且Category作为一个数字存储在DB中。因此,我需要将搜索字符串转换为一个数字,例如,将电气转换为1,将HVAC转换为2,将管道转换为3等等。我不知道如何在搜索中使用数组,更多!我现在甚至不知道这是否可能。非常感谢。
$electrical_num = $swm_flipped_map['Electrical'];