объединение в запросе не работает должным образом - PullRequest
0 голосов
/ 01 марта 2012

Привет, есть таблица категорий

categoryId
Categoryname
Type 

это названия столбцов, поэтому мне нужно показать все категории, где type = 'card', но общая категория сверху здесь - мой код

SELECT * FROM `tbl_Catagory` 
where CatagoryId=1 and type='Card' 
union select * from tbl_Catagory` 
where CatagoryId !=1 and type='Card' 
order by CatagoryId desc`

здесь я получаю desc порядок, но general внизу, так что мне нужна general категория сверху, а остальные категории отображаются в порядке убывания на основе categoryId

Ответы [ 4 ]

2 голосов
/ 01 марта 2012

Вам не нужно UNION:

SELECT * 
FROM tbl_Catagory
WHERE type='Card'
ORDER BY (CatagoryId=1) DESC 
       , CatagoryId DESC

Это работает, потому что True оценивается в 1 и False в 0. Первая часть ORDER BY гарантирует, что только те с CatagoryId=1 будут заказаны первыми. Затем все остальные, которые впоследствии упорядочены по их CategoryId в порядке убывания.

0 голосов
/ 01 марта 2012

вы пропустили обратную галочку в таблице второго запроса tbl_Catagory.

Заменить изменения этим: -

SELECT 
categoryId,
Categoryname,
Type  FROM `tbl_Catagory` 
where CatagoryId=1 and type='Card' 
union 
select 
categoryId,
Categoryname,
Type  from `tbl_Catagory` 
where CatagoryId !=1 and type='Card' 
order by CatagoryId desc`
0 голосов
/ 01 марта 2012
SELECT fielda,fieldb,fieldc FROM 
((SELECT 0 as sortkey,fielda,fieldb,fieldc FROM tbl_Catagory where CatagoryId=1 and        type='Card' )
union  
(select 1 as sortkey,fielda,fieldb,fieldc from tbl_Catagory where CatagoryId !=1 and     type='Card' )) a
order by sortkey

Идея состоит в том, чтобы создать нужные элементы сверху с литеральным значением, которое можно отсортировать после разрешения объединения.

0 голосов
/ 01 марта 2012

Почему вы используете UNION здесь, это можно сделать просто с помощью простого IF

SELECT * FROM    
tbl_Catagory where Type='Card'  
ORDER BY IF (CatagoryId=1,CatagoryId ,1) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...