У меня есть таблица ниже.
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
Как я могу это сделать? благодаря
Вы можете заказать любой из следующих
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 или более строк.
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;