Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 IF-ELSE-mysql查询LIKE运算符_Php_Mysql - Fatal编程技术网

Php IF-ELSE-mysql查询LIKE运算符

Php IF-ELSE-mysql查询LIKE运算符,php,mysql,Php,Mysql,我有一个类似这样的mysql查询 SELECT item FROM items WHERE catid=3 AND tag LIKE '%".$tag[1]."%' OR tag LIKE '%".$tag[2]"%' LIMIT 4 如何让mysql搜索具有“%”$tag[1]”等标记的项目“%”首先,在继续搜索过程以查找具有“%”$tag[2]”等标记的项目“%”。因为现在看起来mysql随机选择要执行的条件。有时,它会显示4个结果,这些结果都是匹配的标记,如“%”“$tag[2]”“%”

我有一个类似这样的mysql查询

SELECT item FROM items WHERE catid=3 AND tag LIKE '%".$tag[1]."%' OR tag LIKE '%".$tag[2]"%' LIMIT 4

如何让mysql搜索具有“%”$tag[1]”等
标记的项目“%”
首先,在继续搜索过程以查找具有“%”$tag[2]”等
标记的项目“%”
。因为现在看起来mysql随机选择要执行的条件。有时,它会显示4个结果,这些结果都是匹配的
标记,如“%”“$tag[2]”“%”
,这是我不想看到的。我希望mysql首先对“%”$tag[1]。“%”这样的标签进行优先级排序

要对结果进行排序,请尝试下面的方法

WHERE catid=3 AND `tag` LIKE '%tag%' ORDER BY IF( `tag` LIKE 'tag1%',0, IF( `tag` LIKE '%tag2', 1, 2 ) )

可能是这样的,使用带有tag1限制的union

MariaDB [sandbox]> select * from items;
+--------+--------+--------+----------+-----------+
| ITMSTK | ITMQTY | ITMCOG | ITMURN   | ITMSOU    |
+--------+--------+--------+----------+-----------+
| WN778  | 1      |      2 | 12345112 | WEB       |
| WN776  | 1      |      1 | 12345112 | WEB       |
| WN771  | 1      |      2 | 12345112 | WEB       |
| WN845  | 1      |      1 | 22544548 | ADVERT    |
| WN846  | 1      |      1 | 22544548 | ADVERT    |
| WN845  | 1      |     20 | 44848643 | TELEPHONE |
+--------+--------+--------+----------+-----------+
6 rows in set (0.00 sec)

MariaDB [sandbox]>
MariaDB [sandbox]> (SELECT itmsou FROM items WHERE 3=3 AND itmsou LIKE '%web%' limit 2)
    -> union all
    -> SELECT itmsou FROM items WHERE 3=3 AND itmsou LIKE '%advert%'
    -> ;
+--------+
| itmsou |
+--------+
| WEB    |
| WEB    |
| ADVERT |
| ADVERT |
+--------+
4 rows in set (0.00 sec)

我从电话里找到了答案


我建议您看一下以下内容:

select *
   ,case when tag  like '%$keyword1%' then 1
        when tag   like '%$keyword2%' then 2 
    end as [priority]
from table_name
where tag   like '%$keyword1%'  or tag   like '%$keyword2%' 
order by [priority]
这实际上仍然会给出关键字2的结果,但同时它将关键字1的优先级排在顶部


或者,您可能对按“相关性”排序感兴趣代替通配符搜索。

这是一个不清楚的问题,请您解释一下,以便更好地理解。@Mr.Developer我想告诉Mysql先查找那些具有
标记(如“%tag1”)
条件的项目,然后再尝试查找具有
标记(如“%tag2%”)条件的项目。
条件。是否可以使用mysql查询或我需要从php执行此操作?
LIKE
是布尔运算符,它是
TRUE
FALSE
(或
NULL
)-不可能是
<4
。请澄清您的问题。您的意思是从您的结果集中的数据源获取tag1的前3个(或1或2个,如果少于3个)结果,以及tag2的其余结果吗?@Mr.Developer P.Salmon我已经细化了问题。请看一看。谢谢大家!当然你不会有任何tag2记录?@P.Salmon对不起,你是什么意思?@P.Salmon是的,我已经编辑过了,但是你的评论是正确的。谢谢你的通知+1我已经完善了我的问题请看一看谢谢!你的答案和这个答案有什么区别?如果找到了关键字1,你只返回关键字1结果,而我的答案实际上同时使用关键字1和关键字2,但排序结果时使用关键字1将结果放在顶部
select *
   ,case when tag  like '%$keyword1%' then 1
        when tag   like '%$keyword2%' then 2 
    end as [priority]
from table_name
where tag   like '%$keyword1%'  or tag   like '%$keyword2%' 
order by [priority]