Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果前两个或更多单词匹配,则返回最短字符串-PHP MYSQL_Php_Mysql_Sql - Fatal编程技术网

如果前两个或更多单词匹配,则返回最短字符串-PHP MYSQL

如果前两个或更多单词匹配,则返回最短字符串-PHP MYSQL,php,mysql,sql,Php,Mysql,Sql,例如,我的数据库表中有以下数据 30 Miles DVD 300 310 To Yuma BluRay 310 To Yuma DVD 2007 310 To Yuma DVD Wide Screen 310 To YumaYoung Guns DVD 4 Collection Fights King Of The Cage DVD 48 Hours DVD Wide Screen 49th Parallel DVD 55 Days at Peking DVD 5th Commandment D

例如,我的数据库表中有以下数据

30 Miles DVD
300
310 To Yuma BluRay
310 To Yuma DVD 2007
310 To Yuma DVD Wide Screen
310 To YumaYoung Guns DVD
4 Collection Fights King Of The Cage DVD
48 Hours DVD Wide Screen
49th Parallel DVD
55 Days at Peking DVD
5th Commandment DVD
6th Day BluRay
6th Day DVD 2000
6th Day The Last Action Hero Box Set DVD
7 Men From Now
7 Seconds Sell Through DVD
7 Seconds UMD Mini for PSP 2005
7 Star Grand Mantis DVD
8 Strikes Of The Wildcat DVD
800 Bullets DVD
83 Hours Til Dawn DVD
9 And A Half Ninjas DVD
我想展示的是独特的标题,因此,上面大部分内容都可以,但我们有:

310 To Yuma BluRay
310 To Yuma DVD 2007
310 To Yuma DVD Wide Screen
如果可能的话,我只想展示:

310 To Yuma BluRay
再次从上面的列表中

6th Day BluRay
6th Day DVD 2000
6th Day The Last Action Hero Box Set DVD
我只想展示:

6th Day BluRay
或者最好是分别前往尤马和第6天

我在想,我可能需要在空格前检查第一个单词中的字母数量,如果超过了,那么说5个字母与下一行匹配,如果它确实匹配,那么它会以某种方式将行添加到列表中,然后当它停止匹配时,吐出最短的一行?如果第一个单词少于5个字母,那么移动到第二个单词,只是为了避免,比如::他们::这个::他们的等等

另一种说法是:如果要包含空格的前5个字符匹配,一旦它们停止匹配,就去掉剩下的字符并打印结果。现在,我还必须再次小心,因为宿醉和宿醉2是合理的

关于这个问题的早期版本,有一个答案是:

SELECT `title` FROM `PRprod_FILMS` m
  WHERE `genre` = 'Action  Adventure'
    AND NOT EXISTS (
      SELECT 1 FROM `PRprod_FILMS` m2
        WHERE m.`title` LIKE CONCAT(m2.`title`, '%')
          AND LENGTH(m2.`title`) < LENGTH(m.`title`)
          AND m2.`genre` = m.`genre`
    )
;
哪一类作品,但去掉了一些独特的标题,所以不是正确的答案 我想知道这是否可能,或者我要求太多,或者需要重新思考策略/逻辑


Darren

没有一个100%好的解决方案,它永远不会显示重复项或删除好记录。然而,我的解决办法是搜索一些常用词DVD、Bluray、PSP等,然后去掉所有内容,使其独一无二。如果您经常这样做,则存储在另一个字段中:

SELECT DISTINCT( TRIM(
  LEFT(title,
    IF( LOCATE('DVD', title),
        LOCATE('DVD', title) - 1,
        IF( LOCATE('Bluray', title),
            LOCATE('Bluray', title) - 1,
            999
        )
    )
  )
)) FROM `PRprod_FILMS`

理想情况下,您可以将格式信息拉到另一个字段中,然后标题字段将只包含标题。这正是我试图做的,您在用另一种方式说它是最长的常见前缀问题后所描述的。在MySQL中实现这一点并非不可能,但非常困难。看一看。而且绝对没有好的方法来处理你的宿醉2问题。如果你只是作为中间步骤来规范你的数据,你应该考虑在MySQL之外做一个更适合这个任务的语言,然后将结果倾倒到MySQL中。