【问题标题】:how to perform a multi sql search via php in one field如何在一个字段中通过 php 执行多 sql 搜索
【发布时间】:2016-12-16 15:35:25
【问题描述】:
我正在使用这个 sql 搜索在我的数据库中查找标题和艺术家。我有一个包含“ref.1570 title artist.mp4”等信息的字段。当我进行搜索时,它可以工作但仅在一个方向上,无论我进行搜索的顺序如何,我都想得到结果......更准确地说,如果我搜索“标题艺术家”没问题,我发现它。如果我没有办法搜索“艺术家标题”......你怎么能帮助我让 php sql 搜索两个方向?
最好的问候,并感谢您的帮助。
菲尔
我正在使用此代码:
if ($search != null) {
$sql = 'SELECT * FROM `catalog` WHERE (`file`LIKE "%' . $search . '%")';
$sqlCount = 'SELECT count(*) FROM `catalog` WHERE (`file`LIKE "%' . $search . '%")';
}
【问题讨论】:
标签:
php
sql
select
count
where-clause
【解决方案1】:
你已经解决了我的问题,我现在知道可以正确地将请求分解为变量..
$search = $name;
$explode=explode(" ",$search);
print_r (explode(" ",$explode));
然后我像这样使用我的 sql 请求
$sql = 'SELECT * FROM `catalog` WHERE (`idc` LIKE "%' . $search . '%" OR `file` LIKE "%' . $search . '%" OR `title` LIKE "%' . $explode[0] . '%" AND `artist`LIKE "%' . $explode[1] . '% " OR `artist`LIKE "%' . $explode[0] . '%" AND `title`LIKE "%' . $explode[1] . '%")';
它正在工作!
酷
【解决方案2】:
您可以尝试这项研究:它对每个单词进行 LIKE %word%。如果您想要更强大的研究,您应该使用弹性搜索等工具......
这样你就可以做到:
$parts = explode(" ",$search)
$queryParts = array();
foreach ($parts as $part) {
$queryParts[] = `artist`LIKE "%' . $part . '%" ;
}
// this way we can have like %artist% AND like %title%
$querySearch= implode(" AND ", $queryParts);
$sql = 'SELECT * FROM `catalog` WHERE (". $querySearch .")';
$sqlCount = 'SELECT count(*) FROM `catalog` WHERE (`". $querySearch .")';
【解决方案3】:
我认为你不会绕过 foreach:
if ($search != null) {
$arrayOfSearchTerms = explode(' ', $search);
$sql = 'SELECT * FROM `catalog` WHERE ';
$sqlCount = 'SELECT count(*) FROM `catalog` WHERE ';
$termNumber = 0;
foreach ($arrayOfSearchTerms as $term) {
$addingSql = '';
if ($termNumber > 0) {
$addingSql = ' OR ';
}
$addingSql .= '(`file` LIKE "%') . $term . '%")';
$sql .= $addingSql;
$sqlCount = $addingSql;
$termNumber++;
}
}
您需要遍历您的搜索词并将这些词添加到您的“LIKE”语句中
【解决方案4】:
为什么不将关键字$search 与space 分开并在查询中附加Like 语句。例如:
if ($search != null) {
$keywords=explode(" ",$search);
$sql = 'SELECT * FROM `catalog` WHERE 1=1'; // just to append OR condition.This won't affect anything as the condition will always be true.
$sqlCount = 'SELECT count(*) FROM `catalog` WHERE 1=1 ';
foreach($keywords as $key){
if(!empty($key)){
$sql.=' And file Like \'%'.$key.'\%';
$sqlCount.=' And file Like \'%'.$key.'\%';
}
}
}
我相信这会如您所愿。