3

这是场景。我有以下 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 方面并不那么聪明。也许这里有人可以帮忙?

4

2 回答 2

1

我不知道我是否真的了解您要搜索的内容,但根据您的结果,我认为这个查询可以;

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

您可以在其中指定dgroup

于 2013-09-25T09:58:10.263 回答
0
SELECT page, last(ciso) as last FROM `pages` where dgroup=3 group by page
于 2013-09-25T10:19:32.070 回答