Php IF-ELSE-mysql查询LIKE运算符
我有一个类似这样的mysql查询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]”“%”
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]