SQL - 如何过滤关键字不正常的结果并将它们放在底部?

Posted

技术标签:

【中文标题】SQL - 如何过滤关键字不正常的结果并将它们放在底部?【英文标题】:SQL - How do I filter results with keyword out of normal order and place them at bottom? 【发布时间】:2013-04-01 21:31:37 【问题描述】:

我有一个网站,我正在使用 php 重建以从 Access 数据库中读取数据。我拥有根据从下拉列表中选择的类别显示产品列表的大部分功能。但是,我想做的一件事是将所有过时的产品移到结果列表的底部。目前,它们混合在显示的结果中。

是否有一条 SQL 语句可以让我这样做?目前,数据库中的所有过时产品都在其产品名称的末尾附加了“(过时)”。我希望我可以针对字符串 (Obsolete) 来执行此操作。

这是我当前的 SQL 语句:

$handle = odbc_connect("Potter","","");
$results = odbc_exec($handle, "SELECT DISTINCT product.prodimage, 
                product.prodmodelno, 
                product.proddesc, 
                product.prodorder, 
                product.prodpdf, 
                product.prodmanual, 
                product.prodtip 
FROM   product 
WHERE  (( ( product.prodmodelno ) LIKE '%$searchTerm%' )) 
        OR (( ( product.proddesc ) LIKE '%$searchTerm%' )) 
ORDER  BY product.prodorder DESC, 
          product.prodmodelno ASC ");

【问题讨论】:

您应该拥有的是产品表中名为obsolete 的列,然后您可以对其进行排序。 好主意。我在数据库中添加了一个 prodObs 列,默认值为 0。对于所有过时的产品,该值 = 1。然后我放置了 prodObs 的 SORT BY,然后是 prodOrder,然后是 prodModelNo。 【参考方案1】:

您需要使用IIF 语句来ORDER(类似于ANSI SQL 中的CASE

http://www.techonthenet.com/access/functions/advanced/iif.php

所以你可以按(未经测试)排序:

IIF (RIGHT(product.[proddesc],10) = "(Obsolete)", "b", "a")

这将创建一个新的派生列,当已过时时为“b”,否则为“a”......

【讨论】:

以上是关于SQL - 如何过滤关键字不正常的结果并将它们放在底部?的主要内容,如果未能解决你的问题,请参考以下文章

sql 示例:如何获取多行结果并将它们放入单个字符串中

SQL注入如何产生?如何防止?

SQL注入问题

从 SQL 表中提取照片和照片 ID 并将它们显示在 PHP 页面上的列表中

如何将一个标签放在另一个标签的末尾并将它们都居中

如何在 Ejabberd 中过滤消息