加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP MySQL查询只在一些字母上然后返回最短的字符串?

发布时间:2020-12-13 16:22:14 所属栏目:PHP教程 来源:网络整理
导读:我有例如,我的数据库表中的以下数据… A Bridge Too FarA Bridge Too Far trilogyA bridge Too Far the sequelGoodfellas the return of PesciGoodfellasGoodfellas 2Goodfellas 3 等等也将有一些独特的条目以及更多如上所述 我想要显示的只是: A Bridge To
我有例如,我的数据库表中的以下数据…

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”仍保留在结果集中,因为它不是任何其他模式的扩展.如果您添加了“坏男孩”,那么您将消除除此之外的所有内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读