sorting - I need to sort MYSQL results by a number passed in OR another column -
here table select statement: sqlfiddle want group job_id , sort number passed in, (in case number 2) if there no match show result default marked true if none marked true sort production_days desc
the end result should have:

all jobs show column production_days = 2 except 103 did not have matching column, sorted is_default desc
i have tried
select *, case production_days when 2 0 when is_default = 1 1 else 2 end sort `jobs` group job_id order job_id, sort edit: desired results are: rows unique job_id have number 2 in production_days column if job_id not have 2 in column looking 1 in is_default column. not care how results achieved in 1 select statement.
i going rephrase understand it: want sort jobs have production_days = 2 first, jobs is_default true, , other jobs.
to that, first broke query down 3 groups , put them together. started getting ones had value 2 in production_days, easiest. hardcoded 0 @ end demonstrate first group:
select j.*, 0 jobs j j.production_days = 2; then, found jobs had is_default = 1 did not have production_days of 2, this:
select j.*, 1 jobs j j.is_default = 1 , j.job_id not in ( select job_id jobs production_days = 2); for last group, need check jobs aren't in either of previous lists. simplifies bit because can narrow down requirement projects have production_days of 2, or have is_default = 1:
select j.*, 2 jobs j j.job_id not in( select job_id jobs is_default = 1 or production_days = 2); the last step combine , sort results. use union, , order sortposition this:
select j.*, 0 sortposition jobs j j.production_days = 2 union select j.*, 1 sortposition jobs j j.is_default = 1 , j.job_id not in ( select job_id jobs production_days = 2) union select j.*, 2 sortposition jobs j j.job_id not in( select job_id jobs is_default = 1 or production_days = 2) order job_id, sortposition; here sql fiddle example.
Comments
Post a Comment