mysql - 优先选择SQL

标签 mysql sql

表:博客文章

+------+--------+-------------+-------------+----------+
| id   | type   | added       | completed   | status   |
+------+--------+-------------+-------------+----------+
| 2    | page   | 1505221377  | 1           | 1        |
+------+--------+-------------+-------------+----------+
| 4    | page   | 1505231377  | 1           | 1        |
+------+--------+-------------+-------------+----------+

表:blog_post_description

+--------------+---------------+-------------------------+-----------------------+-----------------+------------+---------+
| article_id   | language_id   | title                   | permalink             | description     | keywords   | image   |
+--------------+---------------+-------------------------+-----------------------+-----------------+------------+---------+
| 2            | 1             | Privacy policy          | privacy-policy        | Privacy Policy  | privacy    | NULL    |
+--------------+---------------+-------------------------+-----------------------+-----------------+------------+---------+
| 2            | 2             | Politica sulla          | politica-sulla        | description     | privacy    | NULL    |
+--------------+---------------+-------------------------+-----------------------+-----------------+------------+---------+
| 2            | 3             | Política de privacidad  | politica-privacidad   | description     | privacy    | NULL    |
+--------------+---------------+-------------------------+-----------------------+-----------------+------------+---------+
| 4            | 1             | eng                     | eng                   | description     | eng        | NULL    |
+--------------+---------------+-------------------------+-----------------------+-----------------+------------+---------+
| 4            | 2             | it                      | it                    | description     | it         | NULL    |
+--------------+---------------+-------------------------+-----------------------+-----------------+------------+---------+

我要的结果:(language_id = 3优先,如果没有language_id 3,按language_id ASC排序)

+------+--------------------------+-------------+----------+
| id   | title                    | added       | status   |
+------+--------------------------+-------------+----------+
| 2    | Política de privacidad   | 1505221377  | 1        |
+------+--------------------------+-------------+----------+
| 4    | eng                      | 1505231377  | 1        |
+------+--------------------------+-------------+----------+

我试过

SELECT bp.`id`, bp.`type`, bpd.`title`, bpd.`permalink`, bpd.`description`, bpd.`keywords`, bpd.`image`, bp.`added`, bp.`status`
FROM `blog_post` AS `bp`
LEFT JOIN `blog_post_description` AS `bpd` ON (bp.`id` = bpd.`article_id`)
WHERE (bpd.`language_id` = 3 OR bpd.`language_id` IS NOT NULL) GROUP BY bpd.`article_id`

但输出是选择 language_id 1 (english)

enter image description here

最佳答案

您可以使用相关子查询来做到这一点:

SELECT . . .
FROM blog_post bp LEFT JOIN 
     blog_post_description bpd
     ON bp.id = bpd.article_id AND
        bpd.language_id = (SELECT bpd2.language_id
                           FROM blog_post_description bpd2
                           WHERE bpd2.article_id = bpd.article_id
                           ORDER BY (bpd2.language_id = 3) DESC,
                                    bpd2.language_id
                           LIMIT 1
                          );

关于mysql - 优先选择SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47135927/

相关文章:

MySQL:无法删除或更新父行:外键约束失败

SQL 将每一行与引用行进行比较

mysql - 中间有 Unicode 字符的 SQL 查询

php - 找到是营业时间 : MySQL hours calculation

mysql - LOAD DATA INFILE 不起作用

mysql - 使用 Puppetlabs-mysql 允许多个主机

android - Android 中的 MySQL 数据库

mysql - 一次性从数据库中选择并删除条目

php - cakephp查询1.1中MYSQL Max记录不正确

mysql - SQL 过滤复杂查询