禁用最后一行

时间:2011-05-06 02:55:30

标签: php sql postgresql

我在PostgreSQL中有这个表:

 appid |               appname               | apptype | creationtime | createdby | display
-------+-------------------------------------+---------+--------------+-----------+---------
     0 | Custom                              |      -1 |              |           | t
  1000 | Performance/Resource                |      -2 |              |           | t
  2000 | PING                                |       0 |              |           | t
  2001 | HTTP                                |       0 |              |           | t
  2002 | HTTPS                               |       0 |              |           | t
  2003 | FTP                                 |       0 |              |           | t
  2004 | LDAP                                |       0 |              |           | t
  2005 | IMAP                                |       0 |              |           | t
  2006 | POP                                 |       0 |              |           | t
  2007 | SMTP                                |       0 |              |           | t
  2008 | DNS                                 |       0 |              |           | t
  2009 | NFS                                 |       0 |              |           | t
  2010 | NTP                                 |       0 |              |           | t
  2011 | SSH                                 |       0 |              |           | t
  2012 | TCP                                 |       0 |              |           | t
  2013 | TELNET                              |       0 |              |           | t
  3000 | Generic Mail (RTT)                  |       3 |              |           | t
  3001 | Apache Tomcat                       |       2 |              |           | t
  3002 | JBoss                               |       2 |              |           | t
  3003 | MySQL                               |       1 |              |           | t
  3004 | WebSphere                           |       2 |              |           | t
  4000 | Microsoft Exchange Server 2003      |       3 |              |           | t
  4001 | Exchange Server 2007 /2010          |       3 |              |           | t
  4003 | Microsoft SQL Server 2008           |       1 |              |           | t
  4004 | Microsoft ISA Server 2006           |      99 |              |           | t
  4005 | Microsoft IIS                       |       4 |              |           | t
  3005 | DB2                                 |       1 |              |           | t
  3006 | Apache HTTP Server                  |       4 |              |           | t
  3007 | Oracle                              |       1 |              |           | t
  3008 | PostgreSQL                          |       1 |              |           | t
  3009 | WebLogic                            |       2 |              |           | t
  3010 | Adobe ColdFusion                    |       2 |              |           | t
  3011 | Sybase                              |       1 |              |           | t
  4007 | Microsoft SQL Server 2005 (EXPRESS) |       1 |              |           | t
  4008 | Microsoft Team Foundation Server    |       2 |              |           | t
  4009 | Microsoft .NET                      |      99 |              |           | t
  3012 | Apache Tomcat                       |       2 |              |           | f

Apache Tomcat在下拉列表中显示此表时重复2次。如何禁用最后一行3012?我有一个删除它的选项,但是这个表在几个地方使用,所以我不想删除它。

3 个答案:

答案 0 :(得分:2)

我认为更重要的问题是为什么它会在你的数据库中出现两次。根据您使用的内容,此查询忽略一个可能与删除一个错误一样。也许它与显示f的唯一条目有关。我想你可以做WHERE显示!='f'

答案 1 :(得分:1)

Tomcat出现两次,因为它在表中两次,一次是ID 3001,另一次是ID 3012.我称之为数据问题,而不是查询问题。它真的需要在那里两次吗?你说你不愿意删除其中一个,因为它在几个地方使用过,但如果你现在不修复它,那么以后修复起来会更难。

我专注于合并那些重复的行。查找引用该对中的一个的所有记录(在其他表中),并更新它们以引用另一个。然后你可以删除那些没有任何引用的那个。

答案 2 :(得分:0)

为什么不使用display列?听起来像是过滤掉了不应该显示的东西。所以,你可以这样做一个查询:

SELECT appid, appname
FROM stat_applications
WHERE appid  <> 0
  AND appid  <> 1000
  AND display = 't'

如果您不想使用display,那么您只需将3012添加到您要忽略的事项列表中:

SELECT appid, appname
FROM stat_applications
WHERE appid  <> 0
  AND appid  <> 1000
  AND appid  <> 3012

或者,由于您的排除列表越来越长,请使用NOT IN

SELECT appid, appname
FROM stat_applications
WHERE appid NOT IN (0, 1000, 3012)