使用Like和Where语句表单表仅从特定列中搜索内容

时间:2019-08-29 07:15:12

标签: mysql

我正在尝试使用一个表中的多个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,而不显示其他

3 个答案:

答案 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