Запросите заказ по определенному номеру и после, выполните заказ по возрастанию - PullRequest
1 голос
/ 22 ноября 2011

Таблица тема :

+--------+----+
|  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  |
+--------+----+

Как я могу заставить его работать какожидается?

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

Попробуйте

ORDER BY subjects.id> = 5 desc, subjects.id asc

"subjects.id> = 5" вернет 1 или 0, поэтому строки, для которыхСначала будет true, и среди этих строк они будут упорядочены по возрастанию по id

0 голосов
/ 22 ноября 2011
ORDER BY 
if (subjects.id=$id_subject, -1,
  if (subjects.id>$id_subject, 0, 1)
), subjects.id 
0 голосов
/ 22 ноября 2011
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 
...