SQL Query选择回退选项

时间:2013-09-25 09:52:41

标签: mysql

以下是该方案。我有以下MySQL表

CREATE TABLE IF NOT EXISTS `pages` (
`ciso` varchar(3) CHARACTER SET ascii NOT NULL DEFAULT 'AUS',
`page` varchar(24) CHARACTER SET ascii NOT NULL,
`dgroup` TINYINT(1) DEFAULT 0, 
UNIQUE KEY `page` (`page`,`ciso`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

通常,它将包含多个页面的条目,其中ciso ='AUS'。在某些情况下,会有一个特定于美国的覆盖条目,其中页面名称与AUS条目相同,但ciso ='USA'。

我不时需要做的是 - 选择具有指定dgroup设置的所有页面条目& ciso ='USA',但是如果不存在这样的条目,则返回到匹配的AUS条目。为了使它更清楚

page   ciso  dgroup

PgA    AUS    3
PgB    AUS    3
PgC    AUS    3
PgD    AUS    4
PgB    USA    3
PgC    USA    3

在这种情况下,对于dgroup = 3,查询应该返回PgA:AUS,PgB:USA和PgC:USA。

我可以通过PHP来处理所有这些问题,但我怀疑是否可以编写一个能够完成工作的智能SQL。只是,我在SQL方面并不那么聪明。也许有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我不知道我是否真的明白你在搜索什么,但根据你的结果,我认为这个查询会有所作为;

SELECT page, ciso, dgroup
FROM   pages
Where  (ciso = 'USA' OR ciso = 'AUS')
AND     dgroup = 3

您可以在其中指定dgroup

答案 1 :(得分:0)

SELECT page, last(ciso) as last FROM `pages` where dgroup=3 group by page