Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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,例如,我的数据库表中有以下数据 A Bridge Too Far A Bridge Too Far trilogy A bridge Too Far the sequel Goodfellas the return of Pesci Goodfellas Goodfellas 2 Goodfellas 3 等等。也会有一些独特的项目,以及更像上述 我想显示的只是: A Bridge Too Far Goodfellas 基本上,去掉原标题周围不需要的额外信息 我在想,我可能需要在空格前检查第

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

A Bridge Too Far
A Bridge Too Far trilogy
A bridge Too Far the sequel
Goodfellas the return of Pesci
Goodfellas
Goodfellas 2
Goodfellas 3
等等。也会有一些独特的项目,以及更像上述

我想显示的只是:

A Bridge Too Far
Goodfellas
基本上,去掉原标题周围不需要的额外信息

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

我试着从SQL/PHP的角度来逻辑地思考这个问题,但我很挣扎,这可能吗

谢谢你的帮助

达伦

菲尔:谢谢-你的版本可以在sqlize上运行,但我的版本不行

以下是我正在使用的实际代码:

$sql = mysql_query("create temporary table movies (name VARCHAR(255))",$db);        

$sql2 = mysql_query("create temporary table movies2 (name VARCHAR(255))",$db);

$sql3 = mysql_query("insert into movies(name) select title from PRprod_FILMS where genre = 'Action  Adventure'",$db);

$sql4 = mysql_query("insert into movies2(name) select name from movies",$db);

// both tables movies and movies2 identical now

$sql5 = mysql_query("
  SELECT * FROM movies m 
        WHERE NOT EXISTS (
        SELECT 1 FROM movies2 m2
        WHERE m.name LIKE CONCAT(m2.name, '%')
        AND LENGTH(m2.name) < LENGTH(m.name)) order by name
        ",$db);

while ($sql55 = mysql_fetch_array($sql5)){ // aa

echo $sql55[name]."<br />";

    } // close aa

mysql_close();
我想要的地方:2快2狂暴和坏男孩DVD

有什么想法吗

达伦

再次感谢你,菲尔,但我仍然得到:

310 To Yuma BluRay
310 To Yuma DVD 2007
310 To Yuma DVD Wide Screen
我想说我想要什么的另一种方式是:

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

可能吗

达伦

此外,我只是看了一些样本,看看我是否能找出如何进步,并注意到

如果我只是打印标题,则原始列表的示例显示:

0091 Vol3 DVD
02 in H20 A SelfHelp Course on Breathing in Swimmi... // missing
0430 DVD // missing
1 2 3 4 5 DVD // missing
1 Night In Paris DVD // missing
10 Best Fitness DVD // missing
10 Best Fitness Five Discs DVD // missing
10 DVD 1979 // missing
10 Hollywood Leading Men DVD
查询后:

0091 Vol3 DVD
10 Hollywood Leading Men DVD
请注意,0091 Vol3 DVD和10 Hollywood Leading Men DVD之间缺少7行,请尝试此

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`
)
ORDER BY `title`;
出现明显重复的原因是因为它只消除了较短字符串的扩展。解释


你们淘汰了《坏男孩》DVD 1983和《坏男孩》DVD 1995,因为它们是《坏男孩》DVD的扩展。Bad Boys Collectors Edition DVD宽屏幕保留在结果集中,因为它不是任何其他模式的扩展。如果您添加了坏男孩,您将删除除此之外的所有男孩。

您的意思是什么,请详细说明。选择的要求是什么?为什么不选择其他的呢?name='A Bridge Too Far'或name='Goodfellas'不能吗?@Darren我想你没有抓住我例子的重点。你不应该创作《宿醉》续集,为什么不让《好家伙》续集?好吧,我举个坏例子,同意。上面的2个快速2狂暴和坏男孩的例子更好-基本上,我试图从电影名称中去除垃圾,但每个左+1注释中只有一个,您可以使用create temporary table movies 2 select*from movies轻松复制表;在你的代码示例中。谢谢@mellamokb-不管怎么说都在使用它,谢谢你的回答though@DarrenSweeney他们只引用了我的SQLize示例。使用真正的表,您只需要一个。我已经更新了我的答案以符合您的要求setup@DarrenSweeney我已经添加了更多的信息。你最好的办法是确保标题的最短版本没有任何修饰。谢谢Phil,但这仍然没有100%的帮助,因为查询正在从列表中删除许多合法条目,这些条目没有重复项,如我上一个问题编辑中所示。我将重新提出这个问题,希望能说得更清楚一点。谢谢你的帮助。
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`
)
ORDER BY `title`;
A Bridge Too Far
Goodfellas
2 Fast 2 Furious
Bad Boys Collectors Edition DVD Wide Screen
Bad Boys DVD
310 To Yuma BluRay
310 To Yuma DVD 2007
310 To Yuma DVD Wide Screen