【问题标题】:Update field with other fields values alphabetically sorted使用按字母顺序排序的其他字段值更新字段
【发布时间】:2017-05-04 14:26:20
【问题描述】:

我有一个包含一些字符串字段(“p1,p2...p6”)的表(“mytable”)。

我有名为 plA 和 plB 的空字段,我想更新。

plA 必须包含按字母顺序排列并用逗号分隔的 p1、p2 和 p3 值的串联。

plB 必须包含按字母顺序排列并用逗号分隔的 p4、p5 和 p6 值的串联。

这里有一部分 mytable 和想要的结果:

 p1     p2     p3     p4     p5     p6     
 "tpa"  "rst"  "abc"  "cba"  "rpt"  "klw"
 "mtb"  "adr"  "aab"  "mav"  "bad"  "goo"

我要更新表,plA 和 plB 必须包含:

 plA              plB
 "abc,rst,tpa"    "cba,klw,rpt"
 "aab,adr,mtb"    "bad,goo,mav"

谢谢!

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果我假设这些值都是不同的并且从不NULL,您可以通过一些比较逻辑来做到这一点:

        SELECT CONCAT_WS(',',
                     LEAST(p1, p2, p3),
                     (CASE WHEN p1 NOT IN ( LEAST(p1, p2, p3), GREATEST(p1, p2, p3) ) THEN p1
                           WHEN p2 NOT IN ( LEAST(p1, p2, p3), GREATEST(p1, p2, p3) ) THEN p1
                           ELSE p3
                      END),
                     GREATEST(p1, p2, p3)
                    ) AS ps,
            CONCAT_WS(',',
                     LEAST(p4, p5, p6),
                     (CASE WHEN p4 NOT IN ( LEAST(p4, p5, p6), GREATEST(p4, p5, p6) ) THEN p4
                           WHEN p5 NOT IN ( LEAST(p4, p5, p6), GREATEST(p4, p5, p6) ) THEN p5
                           ELSE p6
                      END),
                     GREATEST(p4, p5, p6)
                    ) AS ps
    FROM ...
    

    我应该强调的是数据结构看起来是错误的。您应该将每个“p”值存储在单独的行中。

    此外,这不会超出 3 个值。

    【讨论】:

    • group_concat 发生了什么事?最小/最大更快?stackoverflow.com/questions/15773804/order-before-concat-ws
    • p1 到 p10 代表在篮球比赛中活跃的不同球员。每一行都是一场游戏,所以我不能将每个 p 存储在不同的行上。我需要使用超过 3 个 p 的答案。
    • @Gordon Linoff 我将 p25 更改为 p5,然后它应该可以正常工作。
    • 超过 3 个 p 的任何提示(比如说 5 个)?
    • @Javi 。 . .请问另一个问题。这个问题显然是关于 3 人一组的。5 人一组的处理方式会有所不同。
    猜你喜欢
    • 2020-09-23
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2012-11-02
    相关资源
    最近更新 更多