2009-11-02 1 views
0

Я пытаюсь выбрать два значения в одном выражении вместо двух операторов. Первое утверждение подсчитывает количество выигранных заявок для конкретного конкурса с идентификатором 18. Второй оператор подсчитывает общее количество призов для этого конкурса.SQL: помощь подзапроса

Запрос 1:

SELECT 

COUNT(*) FROM entries 

WHERE entries.contest=18 

AND entries.won=1 

Query 2

SELECT SUM(quantity) FROM prizes WHERE contest=18 

Я хочу иметь оба, чтобы я мог сравнить их на стороне сервера и действовать при этом сравнении .. Так что, если мы должны были сказать, 3 участника, выигравших 18-й конкурс, и общее количество призов 18-го конкурса - 5, сделать что-то ...

Схема:

CREATE TABLE `entries` (
    `id` int(2) unsigned NOT NULL auto_increment, 
    `message_id` bigint(8) unsigned default NULL, 
    `user` int(2) unsigned default NULL, 
    `username` varchar(50) NOT NULL, 
    `contest` int(2) unsigned default NULL, 
    `message` text, 
    `icon` text, 
    `twitter_url` text, 
    `follower` int(2) unsigned default NULL, 
    `entry_date` timestamp NOT NULL default '0000-00-00 00:00:00', 
    `won` int(1) default '0', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 

CREATE TABLE `prizes` (
    `id` int(2) unsigned NOT NULL auto_increment, 
    `name` varchar(25) NOT NULL, 
    `contest` int(2) NOT NULL, 
    `quantity` int(2) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 

Нет таблицы users, потому что я контролирую записи, и я уверен, что я не получу дубликатов, поэтому имя пользователя и т. Д. Сохраняется для строки ввода.

ответ

2

В запросах не имеет ничего общего на всех, вы бы использовать два подзапроса, чтобы получить их в тот же результат:

select 
    (select count(*) from entries where contest = 18 and won = 1) as wins, 
    (select sum(quantity) from prizes where contest = 18) as quantity 
+0

Awesome, спасибо. Я просто понял, что я действительно не отслеживаю, кто выиграл какой приз, а только, только если выиграл или выиграл участник, 'won' по умолчанию равен 0. Должен ли я установить' won' как pk призов вместо '1 '? –

+0

Хм, просто думал, что 0 или 1 может быть pk, я мог бы также обновить таблицу призов, так что 'id' pk начинается с 2. Было бы здорово, если бы вы могли перезвонить. –

+0

@meder: Вместо« выиграть » «поле, вы можете иметь поле« priority_id », которое может быть обнулено. Нулевое значение было бы более очевидным показателем для не-выигрыша, чем магическое число, такое как нуль. – Guffa

 Смежные вопросы

  • Нет связанных вопросов^_^