MySQL查询以获取物品,但始终将某个物品显示在顶部

3
我有一个数据库,当物品输入时,它们会被分配到一个类别,例如“书籍”,“DVD”,“海报”,“配件”,“服装”等。因此,每个物品都有一个附加的类别。
以下是我使用的SQL查询,以查找唯一的类别,以便我们可以按照类别组织物品。
SELECT DISTINCT section FROM merch

这让我得到了正确的结果,将唯一的部分放入数组中。现在,我希望始终列出两个部分。所以我总是希望“海报”和“书籍”排在第一位和第二位,然后显示其余的类别。
是否有一种方法可以调整上面的查询,使这两个部分首先显示,然后剩下的唯一类别显示在下面?
4个回答

4
SELECT DISTINCT section FROM merch 
    ORDER BY FIELD(section, 'books', 'posters') DESC;

谢谢!你和Ryan都给出了相同类型的回复。但是需要使用“DESC”关键字,这样我想要的字段才会被列在顶部。 - Andelas
2
@scatteredbomb:ORDER BY FIELD(section, 'posters', 'books') DESC, section ASC 用于将首先显示 books,然后是 posters,最后是其他按升序排序的部分。 - ypercubeᵀᴹ

2

在我的应用程序中,当我进行此操作时,我使用ORDER BY FIELD()函数,如下所示

SELECT * FROM merch ORDER BY FIELD(section,'posters','books','dvds','accessories')

0

这应该可以运行...

SELECT DISTINCT `section`
           FROM `merch`
       ORDER BY FIELD(`name`, 'posters', 'books');

0

有几种方法可以做到这一点。

如果部分中存在动态数据,则最简单的方法可能是使用 union 语句,比如:

SELECT * FROM section WHERE id = 'books'
    UNION
SELECT * FROM section WHERE id = 'posters'
    UNION
SELECT * FROM section WHERE id IN (SELECT DISTINCT section_id 
                                      FROM merch 
                                      AND section_id not in ('books','posters'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接