Как я могу заказать результат MySql с исключением? - PullRequest
0 голосов
/ 08 января 2012

Я выполняю этот запрос в базе данных MYSql:

select * from wp_postmeta
where meta_key LIKE "%_thumbnail_id"
and post_id = 897

Он возвращает этот набор данных:

Picture.png http://img713.imageshack.us/img713/9065/picturezo.png

Как можноЯ заказываю по meta_key, так что сначала идет _thumbnail_id, затем dogs_image-2_thumbnail_id, а затем dogs_image-3_thumbnail_id?

Если я просто использую order by meta_key asc, нумерованные изображения располагаются по порядку, но _thumbnail_idотображается внизу, а не сверху.

Ответы [ 3 ]

5 голосов
/ 08 января 2012

Как насчет этого?

SELECT * 
FROM wp_postmeta
WHERE meta_key LIKE "%_thumbnail_id" AND post_id = 897
ORDER BY (CASE WHEN meta_key = '_thumbnail_id' THEN 0 ELSE 1 END) ASC, meta_key

Я предполагаю, что _thumbnail_id - единственный странный случай, который у вас есть.

1 голос
/ 08 января 2012
select * from wp_postmeta
where meta_key LIKE "%_thumbnail_id"
and post_id = 897
order by case when meta_key = '_thumbnail_id' then 0 else 1 end, meta_key
0 голосов
/ 08 января 2012

ввести дополнительный столбец order и сделать сортировку по двум столбцам

create table test (
     (...)
     meta_key varchar(255), 
     `order` integer default 1000,
     key (`order`, `meta_key`) -- optional, more disk space usage, faster sorting
)

-- then do
select * from `test` order by `order`, `meta_key`

вам, конечно, придется поддерживать значение столбца заказа вручную (т. Е. Для «исключений» задайте большее или меньшее значение, чем по умолчанию), это будетКроме того, вам потребуется некоторое пространство для индекса двух столбцов

, или лучшим решением будет сортировка данных в другом месте, кроме базы данных (вы запрашиваете их из какого-либо сценария, не так ли?).

или представляетенекоторые, если - кошмар, как это предлагается в других ответах, - но это сделает ваши индексы бесполезными, поэтому это будет кошмар производительности для больших таблиц.

...