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