MySQL条件变量在文本字段中

时间:2014-09-02 15:35:30

标签: mysql

这可能看起来很奇怪,但是你可以在文本字段中存储条件变量(或者可以使其像某个一样工作)吗?

我正在创建一个按日期和类型对通知进行分组的通知系统,因此如果在同一天创建了两个或更多相同类型的通知系统,它会将通知组合在一起并提供计数(例如,Person1和3其他人做了一些事情。)

通知消息作为模板存储在表格中,例如

[[value]] has just done something
然后使用

[[value]]替换为Person1的名称(和count OTHERS)

    REPLACE(t1.message, 
        '[[value]]', 
        IF(t1.value_as_user=1, 
            CONCAT(t1.forename, ' ', t1.surname, IF((count((t1.id + DATE(t1.date)))-1)<>0, 
                CONCAT(' and ', (count((t1.id + DATE(t1.date)))-1), ' other'), 
                '')), 
            t1.value)) as 'message'

唯一的问题是它意味着语法上的消息将不再有意义,即#34; Person1和其他人刚刚做了一些事情&#34;现在应该是&#34; Person1和其他2人已经做了一些事情&#34;

有没有办法在文本字段中选择一个字符串(就像我使用[[value]]所做的那样),除非它具有类似[[has/have]]的位置,并且根据计数正确的可能选择?

1 个答案:

答案 0 :(得分:1)

有时您可以更改句子以避免语法变异:

  

Person1和其他2人做了一些事情

(如果你通过Strunk&amp; White 阅读风格元素,你可能会习惯于以被动语态反冲。上述技巧可能看起来像是作弊。But don't let them bully you.)< / p>

否则,不,在MySQL中没有能够分析字符串并找出其在英语中的语法用法并自动共轭动词的函数。

你可以让[[has / have]]成为字符串中的另一个元字段,然后根据计数将其替换为另一个表达式。

但坦率地说,我不会在SQL表达式中进行字符串格式化。不仅仅是因为这个原因,而且因为SQL中的字符串操作与字面上的任何其他语言(当然除了Java)相比是笨拙的。