Запрос SQL для выбора резервной опции

Вот сценарий. У меня есть следующая таблица 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 ответа

Я не знаю, действительно ли я понимаю, что вы ищете, но согласно вашему результату, я думаю, что этот запрос будет выполнен;

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

где вы можете указать dgroup


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

licensed under cc by-sa 3.0 with attribution.