mysql query PHP: Я хочу, чтобы определенные элементы были первыми, а затем отсортировать остальные элементы

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

id | car_name | owner ------------------------- 1 | Toyota | Jan 2 | Ford | Mike 3 | Isuzu | Andrew 4 | BMW | Jan 5 | Ferrari | Steve 6 | Audi | Jan 7 | Benz | Klark 8 | Hyundai | Jan 9 | Kia | Jan 

Я хочу, чтобы все владельцы автомобилей, но Ян имеет 5 автомобилей, я хочу, чтобы первые четыре пункта Яна были в списке. Меня не волнует порядок, когда я получаю остальные предметы. Как это.

 id | car_name | owner ------------------------- 1 | Toyota | Jan 4 | BMW | Jan 7 | Benz | Jan 8 | Hyundai | Jan 2 | Ford | Mike 3 | Isuzu | Andrew 5 | Ferrari | Steve 6 | Audi | Bob 9 | Kia | Jan 

Как я могу это сделать? благодаря

Solutions Collecting From Web of "mysql query PHP: Я хочу, чтобы определенные элементы были первыми, а затем отсортировать остальные элементы"

Вы можете заказать любой из следующих

 order by owner <> 'Jan' order by owner = 'Jan' desc order by case when owner = 'Jan' then 0 else 1 end order by if(owner = 'Jan',0,1) 

owner = 'Jan' производит 1 для True и 0 для False , поэтому почему desc

Кроме того, поскольку вы не заботитесь о порядке остальных строк, кроме первых четырех, вы можете сохранить остальные строки Jan в продолжении.

Попробуй это:

 SELECT id, car_name, owner FROM ((SELECT 0 x, t.* FROM your_table t ORDER BY owner <> 'Jan' , id LIMIT 4) UNION ALL (SELECT * FROM (SELECT 1 x, t.* FROM your_table t ORDER BY owner <> 'Jan' , id LIMIT 4 , 1000) t ORDER BY id)) t ORDER BY x , id; 

Работает только в том случае, если Jan имеет 4 или более строк.

SQLFiddle

 SELECT * FROM `table_name` order by owner = 'Jan' DESC 

Попробуй это

 SELECT * FROM cars where id not in (select id from cars where owner='Jan' and id = 9) order by owner = 'Jan' desc;