mysql 查询 多列相同,MySQL:在多列中查找相同的字符串

I am trying to make a search-page-like function. I want to make a query to look for "query" in "ColumnA" and "ColumnB" and "ColumnC" and "ColumnD". And select the rows which has the word/phrase "query" in any of those columns.

This appears to work:

SELECT * FROM projects

WHERE

category LIKE '%query%' OR

name LIKE '%query%' OR

description LIKE '%query%'OR

keywords LIKE '%query%' OR

'type' LIKE '%query%'

ORDER BY name ASC

But it is lengthy. Is there any easier or more efficient way of doing this?

解决方案

Simple workaround:

SELECT *

FROM projects

WHERE

CONCAT(category,name,description,keywords,type) LIKE '%query%'

ORDER BY name ASC;

You can add separators between columns if needed:

SELECT *

FROM projects

WHERE

CONCAT(category,"|",name,"|",description,"|",keywords,"|",type) LIKE '%query%'

ORDER BY name ASC;

You can also use a fulltext search (you need to create a fulltext index as described here: How do FULLTEXT INDEXES on multiple columns work?)

SELECT *, MATCH (category,name,description,keywords,type) AGAINST ('query') AS score FROM projects WHERE MATCH (category,name,description,keywords,type) AGAINST ('query');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值