php - mysql: How can list 2 different condition, ordering, and limit requirements from one table? -
php - mysql: How can list 2 different condition, ordering, and limit requirements from one table? -
there table of men , women. table has field, sex has values, men or women.
tabel-a id sex grade-a grade=b 1 men 2 4 2 women 4 5 3 women 6 1 4 men 1 3 5 men 3 6 6 men 5 2
i want sort table below;
first, list 2 men ordering grade-a desc.
second, list rest both men , woman ordering grade-b desc
expected output;
id sex grade-a grade=b 6 men 5 2 5 men 3 6 2 women 4 5 1 men 2 4 4 men 1 3 3 women 6 1
because these 2 conditions have different ordering requirement not utilize union. union slow.
here failed query, part 1
select distinct t.* ( ( select * table-a a.sex = 'men' order a.grade-a desc limit 2 ) union ( select * table-a order a.grade-b desc ) ) t
also tried "case when" logic, cannot limit 2 men @ first,
here failed query, part 2
select * table-a order case when a.sex = 'men' a.grade-a end desc, a.grade-b desc
could back upwards create proper query this?
best regards
try query:
select a.* `table-a` left bring together ( select m2.id `table-a` m2 m2.sex = 'men' order m2.`grade-a` desc limit 2 ) m2 on m2.id = a.id order case when m2.id null 1 else 0 end, case when m2.id null a.`grade-b` else a.`grade-a` end desc
test on sql fiddle
explanation:
to understand how order by
works, see @ table - here table-a
info plus values of expressions in query (case1 refers first case expression, case2 - second):
id sex grade-a grade=b m2.id case1 case2 1 men 2 4 null 1 4 2 women 4 5 null 1 5 3 women 6 1 null 1 1 4 men 1 3 null 1 3 5 men 3 6 5 0 3 6 men 5 2 6 0 5
order by
sorts rows case1 values (in ascending order) , case2 (in descending). after sort have expected:
id sex grade-a grade=b m2.id case1 case2 6 men 5 2 6 0 5 5 men 3 6 5 0 3 2 women 4 5 null 1 5 1 men 2 4 null 1 4 4 men 1 3 null 1 3 3 women 6 1 null 1 1
more info sorting rows
php mysql sql mysql-error-1064
Comments
Post a Comment