PHP MySQL查询只在一些字母上然后返回最短的字符串?
我有例如,我的数据库表中的以下数据…
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 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&&坏男孩DVD 有任何想法吗? 达伦 再次感谢Phil,但我仍然得到: 310 To Yuma BluRay 310 To Yuma DVD 2007 310 To Yuma DVD Wide Screen 我想另一种说出我想要的方式是: 如果前5个字符(obv.包含空格)匹配,一旦它们停止匹配,就会删除剩下的内容并打印结果.现在,我还必须再次小心这个“宿醉”&& “宿醉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”&& “十大好莱坞男主角DVD” 解决方法
试试这个…
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”仍保留在结果集中,因为它不是任何其他模式的扩展.如果您添加了“坏男孩”,那么您将消除除此之外的所有内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |