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`
结果:
| 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`
结果:
| 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`
。
对此查询的结果集的问候:
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`
结果:
| 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`
结果:
| 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`
。