2011-11-22 151 views
1

主题查询顺序做排序按升序

+--------+----+ 
| name | id | 
+--------|----+ 
| apple | 3 | 
| banana | 1 | 
| tree | 4 | 
| horse | 6 | 
| bird | 7 | 
| raq | 2 | 
+--------+----+ 

所以我尽量让这样的(如果,例如,我的$id_subject = 4,我的下一行必须是一个输出中5-6 7-1 ....)

+--------+----+ 
| name | id | 
+--------+----+ 
| tree | 4 | 
| horse | 6 | 
| bird | 7 | 
| banana | 1 | 
| raq | 2 | 
| apple | 3 | 
+--------+----+ 

我的查询:

select subject_url,subjects.id 
    from students_group 
    left join teacher_group on teacher_group.group_school_id = students_group.group_id 
    left join subjects on teacher_group.subject_id = subjects.id 
    where students_group.user_id = 83 
    ORDER BY subjects.id = 5 desc 

但是我得到了这个输出:

+--------+----+ 
| name | id | 
+--------+----+ 
| tree | 4 | 
| apple | 3 | 
| banana | 1 | 
| horse | 6 | 
| bird | 7 | 
| raq | 2 | 
+--------+----+ 

我该如何让它按预期工作?

回答

0
ORDER BY 
if (subjects.id=$id_subject, -1, 
    if (subjects.id>$id_subject, 0, 1) 
), subjects.id 
+0

工作!!!!!!谢谢 – user1029834

1

尝试

ORDER BY subjects.id> = 5递减,subjects.id ASC

“subjects.id> = 5” 将返回1或0,所以对于这是真的会行第一,和这些行当中,他们将责令上升的ID

0
select subject_url,subjects.id 
from students_group 
left join teacher_group on teacher_group.group_school_id = students_group.group_id 
left join subjects on teacher_group.subject_id = subjects.id 
where students_group.user_id = 83 
ORDER BY 
    (subjects.id >= 4) DESC 
    , subjects.id  ASC