查询中的联合不能正常工作

时间:2012-03-01 06:32:03

标签: php mysql union

你有一个类别表

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 个答案:

答案 0 :(得分:2)

您不需要UNION

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

这是有效的,因为True评估为1False评估为0ORDER BY的第一部分确保仅首先订购CatagoryId=1的{​​{1}}。然后,所有其余的随后按其CategoryId按降序排序。

答案 1 :(得分:0)

为什么在这里使用UNION,只需使用简单的IF

即可
SELECT * FROM    
tbl_Catagory where Type='Card'  
ORDER BY IF (CatagoryId=1,CatagoryId ,1) DESC

答案 2 :(得分:0)

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

我们的想法是使用文字值创建您想要的项目,您可以在解析了union之后对其进行排序。

答案 3 :(得分:0)

你错过了第二个查询表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`