Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php数组进行类似mysql的搜索_Php_Mysql_Arrays_Sql Like - Fatal编程技术网

使用php数组进行类似mysql的搜索

使用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

我有一个只有几列的小表,其中一个是将关于类别的信息存储为一个INT,只是一个简单的数字,例如

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'];