例如,我的数据库表中有以下数据......
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的角度对此进行逻辑思考,但是我在努力,甚至可能吗?
所有帮助表示赞赏。
的Darren
菲尔::谢谢 - 您的版本适用于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 Fast 2 Furious
2 Fast 2 Furious Bluray 2003
2 Fast 2 Furious Box Set DVD
2 Fast 2 Furious DVD
2 Fast 2 Furious HD DVD 2003 US Import
Bad Boys Collectors Edition DVD Wide Screen
Bad Boys DVD
Bad Boys DVD 1983
Bad Boys DVD 1995
Bad Boys DVD Superbit Wide Screen
我只想要:2 Fast 2 Furious&amp;&amp;坏男孩DVD
有什么想法吗?
的Darren
再次感谢Phil,但我仍然得到:
310 To Yuma BluRay
310 To Yuma DVD 2007
310 To Yuma DVD Wide Screen
我想另一种说出我想要的方式是:
如果前5个字符(obv。包含空格)匹配,一旦它们停止匹配,就会删除剩下的字符并打印结果。现在,我还必须再次小心这个“宿醉”&amp;&amp; “宿醉2”反映合理!
可能的?
的Darren
另外,我刚看了一些样本,看看我是否可以研究如何进步并注意到......
如果我只是打印标题,原始列表的样本显示:
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”&amp;&amp; “十大好莱坞男主角DVD”
答案 0 :(得分:3)
试试这个......
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`;
这是一个例子 - http://www.sqlize.com/HIaf4zr69L(使用两个相同的临时表,因为你不能在MySQL中多次引用相同的临时表)
使用您的样本集,我得到了
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
明显重复的原因是因为它只消除了较短字符串的扩展。解释......
你消除了“Bad Boys DVD 1983”和“Bad Boys DVD 1995”,因为它们是“Bad Boys DVD”的扩展。 “Bad Boys Collector Edition DVD Wide Screen”仍保留在结果集中,因为它不是任何其他模式的扩展。如果您添加了“Bad Boys”,那么您将删除除此之外的所有内容。