2009-11-02 49 views
0

我想在一個語句中選擇兩個值而不是兩個語句。第一個陳述是計算具有18的特定比賽獲勝的條目數。第二個陳述計算該比賽的總獎金數量。SQL:子查詢幫助

查詢1:

SELECT 

COUNT(*) FROM entries 

WHERE entries.contest=18 

AND entries.won=1 

查詢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

真棒,謝謝。我只是意識到,我並沒有真正追蹤誰贏得了什麼獎項,而只是當參賽者贏了或不贏時,「won」默認爲0.我應該將「won」設置爲獎金的pk而不是「1」 '? – 2009-11-02 09:34:58

+0

嗯,只是覺得0或1可能是pk,我也可以更新獎品表,所以'id' pk從2開始。如果你可以參加,這將是非常棒的。 – 2009-11-02 09:41:41

+0

@meder:而不是「贏「字段,你可以有一個可以爲空的」prize_id「字段。對於非贏局來說,空值將是一個更明顯的指標,而不是一個像零的幻數。 – Guffa 2009-11-02 09:51:48