Mysql 获取具有ID的所有记录,但第一个记录也应匹配另一个条件

Mysql 获取具有ID的所有记录,但第一个记录也应匹配另一个条件,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我正在从数据库中获取属于某个站点组的所有站点从站点组id=1的站点中选择* 现在,从所有获取的结果中,我希望某些结果首先出现(例如,具有line_id=2的站点首先出现)。例如,如果这是我的站点表: id | station_group_id | line_id ------------------------------- 1 | 1 | 1 2 | 1 | 2 3 | 1

我正在从数据库中获取属于某个站点组的所有站点<代码>从站点组id=1的站点中选择*

现在,从所有获取的结果中,我希望某些结果首先出现(例如,具有line_id=2的站点首先出现)。例如,如果这是我的
站点
表:

id | station_group_id | line_id
-------------------------------
1  |                1 |       1
2  |                1 |       2
3  |                1 |       3
我希望输出为:

id | station_group_id | line_id
-------------------------------
1  |                1 |       2
2  |                1 |       1
3  |                1 |       3
因此,
line_id=2
是输出中的第一条记录

我曾考虑过按
使用
订单,但这并不是一个订单问题,而是一个“偏好”问题


那么,是否可以根据条件,最好在一个查询中,将一些记录放在输出的顶部?谢谢

正如您所说,它实际上是一个首选项,因此您应该将其建模为表上的一个额外字段(例如,ordinal、order或preferredOrder),或者继续按行id排序,并在代码中执行“特殊排序”。(查找id为2的元素,移动到顶部)

尝试以下操作:

SELECT * FROM stations 
WHERE station_group_id = 1 
ORDER BY if(line_id in('2','X','Y','Z'),0,1)

它的可能复本并不完全是复本。我需要在输出上只允许某些记录,而不使用前一个查询中的顺序来排序。我考虑过联合,但我会选择另一个答案。但是,请投票选出一个有用的答案。或者,您可以为id=1的记录分配第_id=2行,反之亦然。然后您可以使用“order by”运行一个简单的select;)Id和移动到顶部的记录数是随机的,所以我想要更干净的:)如果你想要一个更通用的解决方案,你应该在表中添加一个名为“display_order”的列。它有什么用?我仍然需要遍历整个表,以根据当前查询填充此字段。正如我所说,顺序是动态的,因此它会从一个查询更改为另一个查询,因此前一个顺序在当前查询中是无用的。我希望在查询中执行此操作,以便以后不再解析结果。
SELECT * FROM stations 
WHERE station_group_id = 1 
ORDER BY if(line_id in('2','X','Y','Z'),0,1)