Doctrine Priority select 取决于字段值

Doctrine Priority select depends on a field value

对此查询的结果集的问候:

Select * 来自 [My_Table]

FK_id| name   | code  |
___________________
1 | first  | 21500 |
___________________
1 | first  | 0     |
___________________
2 | second | 21500 |
___________________
4 | four   | 21500 |
___________________
4 | four   | 42000 |
___________________
4 | four   | 0     |
___________________
5 | fifth  | 0     |
___________________
5 | fifth  | 42000 |
___________________
6 | six  | 0       |
___________________

我需要满足这些条件的 select 行(不同的 Fk_ID):

如果代码与 0 不同,我们将使用我们想要的代码(它是查询的参数) 如果没有与此参数相等的行,我们将采用带有 0.

的行

这就是我需要的:

如果code = 21500

Fk_id| name   | code  |
___________________
1 | first  | 21500 |
___________________
2 | second | 21500 |
___________________
4 | four   | 21500 |
___________________
5 | fifth  | 0     |
___________________
6 | six  | 0       |
___________________

如果code = 42000

Fk_id| name   | code  |
___________________
1 | first  | 0     |
___________________
4 | four   | 42000 |
___________________
5 | fifth  | 42000 |
___________________
6 | six  | 0       |
___________________

我需要先有 SQL 查询,不需要学说查询生成器。

我添加了一个 id 列来简化 PHPMyAdmin 的版本,但它在这里没有任何作用。

If code = 21500 :

SELECT * FROM `test`
WHERE (`code` = 21500 OR `code` = 0)
GROUP BY `name`
ORDER BY `FK_id`

Demo at SQL Fiddle.

结果:

| id | FK_id |   name |  code |
|----|-------|--------|-------|
|  1 |     1 |  first | 21500 |
|  3 |     2 | second | 21500 |
|  4 |     4 |   four | 21500 |
|  7 |     5 |  fifth |     0 |
|  9 |     6 |    six |     0 |

If code = 42000 :

SELECT *, MAX(code) FROM `test`
WHERE (`code` = 42000 OR `code` = 0)
GROUP BY `name`
ORDER BY `FK_id`

Demo at SQL Fiddle.

结果:

| id | FK_id |  name |  code | MAX(code) |
|----|-------|-------|-------|-----------|
|  2 |     1 | first |     0 |         0 |
|  5 |     4 |  four | 42000 |     42000 |
|  7 |     5 | fifth |     0 |     42000 |
|  9 |     6 |   six |     0 |         0 |

我使用 MAX() 是为了在结果的第一行获得 42000 而不是 0

在这两个查询中,您可以将 GROUP BY `name` 替换为 GROUP BY `FK_id`