php - 如何获取默认值的记录

标签 php mysql

我正在为一个多语言网站设计数据库。我想使用以下流行的方法:

postid  |   post_title  |  lang
------------------------------
1       |  title1        |  en
1       |  title2        |  fr
2       |  title3        |  en

当我更改语言时,我会运行查询以获取类似

的帖子
select post_title from post where lang = "en" group by postid

postid  |   post_title  |  lang
------------------------------
1       |  title1        |  en
2       |  title3        |  en


select post_title from post where lang = "fr" group by postid

postid  |   post_title  |  lang
------------------------------
1       |  title2        |  fr

问题是如果我想要一个给我这样的结果的查询

 postid  |   post_title  |  lang
------------------------------
1       |  title2        |  fr
2       |  title3        |  en

意味着如果我没有收到fr 语言的帖子,那么我应该得到默认的en 语言帖子。

最佳答案

此查询将返回 lang = "fr"lang = "en" 的行如果在 "fr" 中没有找到相应 postid 的记录。

SELECT
    *
FROM post AS a
WHERE
    a.lang = "fr"
    OR (
        a.lang = "en"
        AND (
            SELECT COUNT(*)
            FROM post AS b
            WHERE
                b.lang = "fr"
            AND b.postid = a.postid
        ) = 0
    )
GROUP BY a.postid

这种尝试有效,但我不知道这是否是实现它的最佳方法。

关于php - 如何获取默认值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51377082/

相关文章:

mysql - wordpress 和 node.js

mysql - 克隆 MySQL 数据库

php - 使用 cpulimit 和 PHP 减少 FFmpeg CPU 使用率

python - 从 Python 插入 MySQL - 错误

php - 从字符串中获取所有图片 url

javascript - 数据表列过滤器未显示

mysql - 这个 mySQL 查询有什么问题?

php - 什么是检测 PHP 消息中垃圾邮件的最佳方法

php - Laravel 与一段关系中的垃圾

php - 如何获取正在电影院播放的所有电影?