【问题标题】:How to run a INSERT query in IF statement success/failer case如何在 IF 语句成功/失败情况下运行 INSERT 查询
【发布时间】:2016-04-18 03:44:32
【问题描述】:

我有两张桌子。 新闻: id、主题、作者、出版商 语言环境: news_id、lang_id、名称 表格新闻与语言环境是一对多关系。

在我的网站上, 如果激活了新语言,那么我需要将激活的语言变量(从相应的新语言的默认语言值中获取值)添加到表区域设置 如果新语言被停用,那么我需要从表区域设置中删除激活的语言变量 这个过程对于新闻表中的所有条目都是一样的。

例如:- 表 - 新闻:
id 主题 作者 出版商
1 个样本 1 作者 1 出版商 1
2 样本 2 作者 2 发布者 2

表 - 语言环境:
news_id lang_id 名称
1 1 新闻1 - 德语
1 2 新闻1 - 英文
1 3 新闻1 - 法语
2 1 新闻2 - 德语
2 2 新闻2 - 英文
2 3 新闻2 - 法语

如果我激活“意大利”语言,我需要添加以下条目:
news_id => 1 lang_id => 4 name => news1 - 意大利语
news_id => 2 lang_id => 4 name => news2 - 意大利语

如果我停用“英语”语言,我需要删除以下条目:
news_id => 1 lang_id => 2 name => news1 - 英文
news_id => 2 lang_id => 2 名称 => news2 - 英文

我需要使用 MYSQL(单一查询)来完成这个过程。

【问题讨论】:

  • 请修正您的格式。
  • 您的locale 表似乎是关联表,但没有基础语言表?虽然您可以使用INSERT ... SELECT 将新条目填充到这样的locale 表中,但通常会包含MySQL 无法自动提供的翻译数据(特定于每个新闻/语言环境组合):因此这样任务通常作为外部(通常是手动)流程的一部分执行。此外,“停用”很少涉及删除底层记录(只是以某种方式标记它们),尽管级联删除外键约束可以实现这一点。

标签: mysql


【解决方案1】:

语言激活查询:

INSERT IGNORE INTO 
                            `locale` 
                            (   `news_id`, 
                                `lang_id`, 
                                `name`
                            )
                        SELECT * FROM 
                            (SELECT `news_id`, 
                                    ' . $activatedLangId . ',
                                    `name` 
                                FROM `locale` 
                                WHERE lang_id = ' . $defaultLangId . '
                            ) as tmp

语言停用查询:

DELETE FROM `locale` WHERE lang_id = ' . $deactivatedLangId

注意:在 locale 表中,news_id 和 lang_id 被索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2017-12-30
    • 2017-09-03
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多