我正在尝试使用一个表中的多个Like语句在列中搜索特定的匹配项,但该搜索应从特定的列中进行。
尝试为PHP执行此MySQL语句
SELECT count(*) FROM morefiles where file like '%.doc%' or file like '%.pdf%' or file like '%.txt%' AND assignto=882
TABLE
-------
id | ProductId | file
0 882 myfile.pdf
1 831 thisfile.docx
2 232 files.mp3
3 882 otherfile.pdf
4 882 textfile.doc
我得到的结果
TABLE
-------
id | ProductId | file
0 882 myfile.pdf
1 831 thisfile.docx
3 882 otherfile.pdf
4 882 textfile.doc
我期望的结果
TABLE
-------
id | ProductId | file
0 882 myfile.pdf
3 882 otherfile.pdf
4 882 textfile.doc
我要搜索的方式仅显示882的ProductID,而不显示其他
答案 0 :(得分:0)
大括号应该可以解决您的问题。
SELECT count(*) FROM morefiles
where assignto=882
and (file like '%.doc%' or file like '%.pdf%' or file like '%.txt%');
答案 1 :(得分:0)
这将起作用:
SELECT count(*)
FROM morefiles
WHERE file LIKE '%.doc'
OR file LIKE '%.pdf%'
OR file like '%.txt%'
AND assignto=882;
答案 2 :(得分:0)
在这种情况下,我将使用函数substring_index()
来避免所有这些headerMessage
(否则它们必须放在括号中,因为它们的优先级低于OR
):>
AND
select * from tablename
where productid = '882'
and substring_index(file, '.', -1) in ('doc', 'pdf', 'txt')
,以substring_index()
作为最后一个参数,返回字符串中最后一个点之后的部分。
请参见demo。
结果:
-1
在以下情况下,如果您只需要计算文件数:
| id | ProductId | file |
| --- | --------- | ------------- |
| 0 | 882 | myfile.pdf |
| 3 | 882 | otherfile.pdf |
| 4 | 882 | textfile.doc |
请参见demo。
结果:
select sum(
productid = '882'
and
substring_index(file, '.', -1) in ('doc', 'pdf', 'txt')
) as counter
from tablename