使用mysql按三个条件订购

使用mysql按三个条件订购,mysql,Mysql,我有一个连接查询,我需要用三个条件记录订单 1.那些记录采购订单工作流代码编号='3'排在第一位 2.这些记录状态=空,排在第二位 3.在那之后是所有的铰孔记录 请给我一个适当的解决方案,我应该如何写这个 我已经尝试过这个代码。在我的查询中,我没有得到我想要的 SELECT purch_order.user_code_tx as user_code_tx ,purch_order.date_creation as date_creation ,purch_order.purch_ord

我有一个连接查询,我需要用三个条件记录订单 1.那些记录采购订单工作流代码编号='3'排在第一位 2.这些记录状态=空,排在第二位 3.在那之后是所有的铰孔记录

请给我一个适当的解决方案,我应该如何写这个 我已经尝试过这个代码。在我的查询中,我没有得到我想要的

SELECT purch_order.user_code_tx as user_code_tx ,purch_order.date_creation 
    as date_creation ,purch_order.purch_order_code_nr as purch_order_code_nr 
    ,purch_order.status as status ,purch_order.purch_order_workflow_code_nr as purch_order_workflow_code_nr ,ppod.vehicle_plate_tx as vehicle_plate_tx ,(Select pd.purch_order_detail_desc_tx from purch_order_detail pd where pd.purch_order_code_nr = purch_order.purch_order_code_nr limit 1 ) as purch_order_detail_desc_tx ,(Select pd.purch_order_workflow_desc_tx from purch_order_workflow pd where pd.purch_order_workflow_code_nr = purch_order. purch_order_workflow_code_nr limit 1 ) as purch_order_workflow_desc_tx ,vehicle.op_base_code_nr as op_base_code_nr ,company_division.div_name_tx as div_name_tx ,company_division_op_bases.op_base_name as op_base_name 
FROM purch_order inner join (Select distinct pod.purch_order_code_nr, pod.vehicle_plate_tx from purch_order_detail pod) ppod on ppod.purch_order_code_nr = purch_order.purch_order_code_nr inner join vehicle on vehicle.vehicle_plate_tx = ppod.vehicle_plate_tx inner join company_division on company_division.div_code_nr= purch_order.div_code_nr inner join company_division_op_bases on company_division_op_bases.op_base_code_nr = vehicle.op_base_code_nr 
WHERE purch_order.company_code_nr='1000' LIMIT 7; 

这应该适合您:

SELECT purch_order.user_code_tx as user_code_tx ,purch_order.date_creation 
    as date_creation ,purch_order.purch_order_code_nr as purch_order_code_nr ,purch_order.status as status ,purch_order.purch_order_workflow_code_nr as purch_order_workflow_code_nr ,ppod.vehicle_plate_tx as vehicle_plate_tx ,(Select pd.purch_order_detail_desc_tx from purch_order_detail pd where pd.purch_order_code_nr = purch_order.purch_order_code_nr limit 1 ) as purch_order_detail_desc_tx ,(Select pd.purch_order_workflow_desc_tx from purch_order_workflow pd where pd.purch_order_workflow_code_nr = purch_order. purch_order_workflow_code_nr limit 1 ) as purch_order_workflow_desc_tx ,vehicle.op_base_code_nr as op_base_code_nr ,company_division.div_name_tx as div_name_tx ,company_division_op_bases.op_base_name as op_base_name, 
    CASE 
    WHEN purch_order_workflow_code_nr = '3' THEN 1
    WHEN status = '' THEN 2
    ELSE 3
    END
    AS order_bit
FROM purch_order inner join (Select distinct pod.purch_order_code_nr, pod.vehicle_plate_tx from purch_order_detail pod) ppod on ppod.purch_order_code_nr = purch_order.purch_order_code_nr inner join vehicle on vehicle.vehicle_plate_tx = ppod.vehicle_plate_tx inner join company_division on company_division.div_code_nr= purch_order.div_code_nr inner join company_division_op_bases on company_division_op_bases.op_base_code_nr = vehicle.op_base_code_nr 
WHERE purch_order.company_code_nr='1000' 
ORDER BY order_bit
LIMIT 7; 

首先。你必须格式化你的查询,你才能更好地理解。 第二格式化此查询后,可以查看订单的位置

选择purch_order.user_code_tx作为user_code_tx, purch_order.date_creation作为date_creation, 采购订单。采购订单代码作为采购订单代码, 采购订单状态为状态, 采购订单。采购订单工作流程代码作为采购订单工作流程代码, ppod.vehicle_plate_tx作为vehicle_plate_tx, 选择pd.purch\U order\U detail\U desc\U tx 来自采购订单详情pd 其中pd.purch\U order\U code\U nr=purch\U order.purch\U order\U code\U nr 限值1为采购订单详细说明, 选择pd.purch\u order\u workflow\u desc\u tx 来自采购订单工作流pd 其中pd.purch\u order\u workflow\u code\u nr=采购订单。采购订单工作流程代码编号 限制1为采购订单工作流描述发送, 车辆。操作基本代码作为操作基本代码, 公司部门名称作为部门名称, 公司、部门、基地、基地名称作为基地名称 从采购订单 内部连接从采购订单详细包装ppod中选择不同的包装箱采购订单代码编号、包装箱车辆铭牌发送 关于ppod.purch\U order\U code\U nr=purch\U order.purch\U order\U code\U nr 内连接车 车上.vehicle\u plate\u tx=ppod.vehicle\u plate\u tx 内部联合公司 在公司部门。部门代码=采购订单。部门代码 内联公司、事业部、运营基地 在公司\部门\运营\基地。运营\基地\代码\编号=车辆。运营\基地\代码\编号 何处采购订单。公司代码='1000' -订单位置-
限制7在sql中添加额外的flg会有所帮助。 例如:

SELECT 
    ..., 
    IF(purch_order_workflow_code_nr = '3', 1, 2) as powcn_flg,
    IF(status='empty', 1, 2) as statsu_flg
FROM ...
WHERE ...
ORDER BY powcn_flg ASC, status_flg ASC
因此,如果您将sql更改为以下内容,则它可能会正常工作:

SELECT 
purch_order.user_code_tx as user_code_tx ,
purch_order.date_creation as date_creation ,
purch_order.purch_order_code_nr as purch_order_code_nr ,
purch_order.status as status ,purch_order.purch_order_workflow_code_nr as urch_order_workflow_code_nr ,
ppod.vehicle_plate_tx as vehicle_plate_tx ,
(Select pd.purch_order_detail_desc_tx from purch_order_detail pd where pd.purch_order_code_nr = purch_order.purch_order_code_nr limit 1 ) as purch_order_detail_desc_tx 
,(Select pd.purch_order_workflow_desc_tx from purch_order_workflow pd where pd.purch_order_workflow_code_nr = purch_order. purch_order_workflow_code_nr limit 1 ) as purch_order_workflow_desc_tx ,
vehicle.op_base_code_nr as op_base_code_nr ,
company_division.div_name_tx as div_name_tx ,
company_division_op_bases.op_base_name as op_base_name ,

IF(purch_order_workflow_code_nr = '3', 1, 2) as powcn_flg,
IF(status='empty', 1, 2) as statsu_flg

FROM purch_order 
inner join (Select distinct pod.purch_order_code_nr, pod.vehicle_plate_tx from purch_order_detail pod) ppod on ppod.purch_order_code_nr = purch_order.purch_order_code_nr 
inner join vehicle on vehicle.vehicle_plate_tx = ppod.vehicle_plate_tx 
inner join company_division on company_division.div_code_nr= purch_order.div_code_nr 
inner join company_division_op_bases on company_division_op_bases.op_base_code_nr = vehicle.op_base_code_nr 
WHERE purch_order.company_code_nr='1000' 
ORDER BY powcn_flg ASC, status_flg ASC
LIMIT 7; 

@user3304880抱歉弄错了,我现在添加了缺少的结尾。它应该可以工作。你们能不能请在条件和状态下,它在数据库中有数组值。我想找到一个值,如果不可用,也比第二个条件run@user3304880我不明白你最后的评论。状态字段中是否有数组值并在其中搜索元素?如果是,如何在此字段中存储阵列?JSON还是序列化?是值,如列上的2,3,4。如果userid=5,则还可以按第二个条件运行订单。表示列上不存在值。。感谢您应该使用一个REGEXP查询,如状态不是REGEXP CONCAT',?',userid',,?',然后是2