-2

我想做的是从我的数据库中选择视频,VID = 1 和最大 VID = 25000,我有 400k 视频,但我不想全部开始,所以我需要选择这种方式,我做这个命令对于搜索脚本,但我如何看待它不起作用......希望有人可以帮助我解决这个问题

用于搜索的 MySql 命令(这个命令是为了告诉我找到了多少视频):

  select 
  count(*) as num 
  from 
    video 
 where 
    VID BETWEEN 1 AND 25000 
 AND 
    title LIKE '%key1%' 
 or 
    title LIKE '%key2%' 
 or 
    title LIKE '%key3%' 
 or 
    title LIKE '%key4%' 
4

7 回答 7

2

我认为您需要通过在 AND 子句中添加括号来使用运算符优先级

   select 
    count(*) as num 
    from 
        video 
    where 
        VID BETWEEN 1 AND 25000 
    AND 
        (title LIKE '%key1%' 
    or 
        title LIKE '%key2%' 
    or 
        title LIKE '%key3%' 
    or 
        title LIKE '%key4%' );
于 2013-10-07T09:41:11.423 回答
1

添加你LIKE的括号(),尝试做:

select count(some_id) as num from video where 
VID >= 1 AND VID <= 25000 AND 
(title LIKE '%key1%' or title LIKE '%key2%' or title LIKE '%key3%' or title LIKE '%key4%')
于 2013-10-07T09:40:59.460 回答
1

试试下面:

select count(*) as num from video where VID BETWEEN 1 AND 25000 AND (title LIKE '%key1%' or title LIKE '%key2%' or title LIKE '%key3%' or title LIKE '%key4%') 
于 2013-10-07T09:41:03.550 回答
1

只是所有标题比较都设置在括号中。

select 
  count(*) as num 
  from 
    video 
 where 
    VID BETWEEN 1 AND 25000 
 AND (
    title LIKE '%key1%' 
 or 
    title LIKE '%key2%' 
 or 
    title LIKE '%key3%' 
 or 
    title LIKE '%key4%' 
)
于 2013-10-07T09:43:52.073 回答
1

尝试这个

 SELECT count(title) as num 
 FROM video 
 WHERE vid <= 25000 
 AND (title LIKE '%key1%' OR title LIKE '%key2%' OR title LIKE '%key3%' OR title LIKE '%key4%')
于 2013-10-07T09:44:42.170 回答
1

您的 between 做得很好,真正的问题是您当前的脚本是这样执行的,因为 AND 运算符的优先级高于 OR:

select 
count(*) as num 
from 
  video 
where 
  (VID BETWEEN 1 AND 25000 
AND 
  title LIKE '%key1%')
or 
  title LIKE '%key2%' 
or 
  title LIKE '%key3%' 
or 
  title LIKE '%key4%'

所以你需要做的是像这样改变它:

select 
count(*) as num 
from 
  video 
where 
  VID BETWEEN 1 AND 25000 
AND (
  title LIKE '%key1%'
or 
  title LIKE '%key2%' 
or 
  title LIKE '%key3%' 
or 
  title LIKE '%key4%' )
于 2013-10-07T09:47:40.857 回答
0

尝试这个

select 
    count(if(vid between 1 and 25000, 1, 0)) as totalvideocnt
from
    video
where
    (title like '%key1%' or title like '%key2%' or title like '%key3%' or title like '%key4%')
于 2013-10-07T09:54:08.317 回答