MySQL порядок по полю плюс поле - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть таблица

id   type       left    right 
1    featured   1       2 
2    default    3       1 
3    default    5       2 
4    default    2       7 
5    featured   3       4 
6    featured   3       2 
7    day        1       3
8    default    12      42

Мне нужно вывести пять идентификаторов, где type != day и отсортировать их по sum(left + right) и отсортировать по признакам, по умолчанию

Во-первых, нужны всеРекомендуемый тип ORDERING by sum(left + right), чем с type = dafule ordering by sum(left + right) LIMIT 5

Что я хочу получить:

5, 6, 1, 8, 4

Спасибо!

Ответы [ 4 ]

2 голосов
/ 08 февраля 2012

Сортировка по «Featured» идет впереди, если IF () в порядке по ... если тип «признак», то используйте 1 в качестве основы для сортировки, в противном случае используйте 2. Так как у вас есть только Featured идоступно по умолчанию (ограничение «дневных» записей).В противном случае это будет изменено на конструкцию CASE / WHEN для учета других типов

select
      yt.id,
      yt.type,
      yt.left + yt.right as LeftPlusRight
   from 
      YourTable yt
   where
      yt.type <> 'day'
   order by
      if( yt.type = 'featured', 1, 2 ),
      LeftPlusRight  DESC
   limit 5
1 голос
/ 08 февраля 2012

с ожидаемым результатом:

5, 6, 1, 8, 4

вы действительно хотите отсортировать идентификатор по type desc, затем по sum из left и right desc, поэтому следующий запрос может удовлетворить ваши потребности:

SELECT
    id
FROM
    tlr
WHERE
    `type`!='day'
ORDER BY 
    `type` DESC, `left`+`right` DESC
LIMIT 5;

это работает так:

mysql [localhost] {msandbox} (test) > select * from tlr;
+----+----------+------+-------+
| id | type     | left | right |
+----+----------+------+-------+
|  1 | featured |    1 |     2 |
|  2 | default  |    3 |     1 |
|  3 | default  |    5 |     2 |
|  4 | default  |    2 |     7 |
|  5 | featured |    3 |     4 |
|  6 | featured |    3 |     2 |
|  7 | day      |    1 |     3 |
|  8 | default  |   12 |    42 |
+----+----------+------+-------+
8 rows in set (0.00 sec)

mysql [localhost] {msandbox} (test) > select id from tlr where `type`!='day' order by type desc, `left`+`right` desc limit 5;
+----+
| id |
+----+
|  5 |
|  6 |
|  1 |
|  8 |
|  4 |
+----+
5 rows in set (0.00 sec)
0 голосов
/ 08 февраля 2012
SELECT 
     ID
FROM 
     yourTable
WHERE 
     type <> 'day'
ORDER BY (type = 'featured') DESC, (`left` + `right`) DESC
LIMIT 5

Приведенный выше запрос дает правильный результат, я думаю.

0 голосов
/ 08 февраля 2012
select id
from your_table
where `type` != 'day'
order by `type`, sum(left + right)
group by `type`    
limit 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...