你有一个类别表
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
降序显示1} p>
答案 0 :(得分:2)
您不需要UNION
:
SELECT *
FROM tbl_Catagory
WHERE type='Card'
ORDER BY (CatagoryId=1) DESC
, CatagoryId DESC
这是有效的,因为True
评估为1
和False
评估为0
。 ORDER 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`