Размещение заказа согласно условию - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть запрос:

SELECT * FROM Cars WHERE (cars.mark = "Audi" and cars.model = "a4" and cars.year = 2008) or 
             (cars.mark = "Audi" and cars.model <> "a4" and cars.year = 2008) or  
             (cars.mark <> "Audi" and cars.model <> "a4" and cars.year = 2008 )

Как я могу заказать его по условию. Первые результаты: cars.mark = "Audi" and cars.model = "a4" and cars.year = 2008 следующий результат: (cars.mark = "Audi" and cars.model <> "a4" and cars.year = 2008) и третий: (cars.mark <> "Audi" and cars.model <> "a4" and cars.year = 2008 ).

Я не могу использовать запрос на объединение, потому что это проект Symfony и он не поддерживает объединение. Спасибо

1 Ответ

1 голос
/ 05 апреля 2020

Не уверен, что ваше условие «где» полезно, в основном говорит, что дайте мне все оценки моделей 2008 года, я уверен, что модель уникальна для всех марок. Что касается упорядочения результатов, то вы можете заказать условно.

drop table if exists t;
create table t
(mark varchar(4) , model varchar(4), year int);

insert into t values
('audi','a3',2008),
('ford','st',2008),
('audi','a4',2008),
('gm','junk',2008),
('gm','junk',2009),
('ford','xx',2008);


SELECT * FROM t 
WHERE  year = 2008
order by 
case when t.mark = "Audi" and t.model = "a4"  then 1 
     when t.mark = "Audi" and t.model <> "a4"  then 2 
     when t.mark <> "Audi" and t.model <> "a4" then 3
     else 4
     end ,
mark desc;

+------+-------+------+
| mark | model | year |
+------+-------+------+
| audi | a4    | 2008 |
| audi | a3    | 2008 |
| gm   | junk  | 2008 |
| ford | st    | 2008 |
| ford | xx    | 2008 |
+------+-------+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...