2012-10-27 41 views
0

所以我有這樣計數相同的值

SELECT * FROM `catalog` WHERE `id` IN ('2','2','3','3','3'); 

查詢而這回只有2行ID爲2和3有可能使其返回5行(2 ID爲「2」和3與ID「3」)或添加計數爲新列?

+2

您正在使用數據庫引擎來檢索冗餘數據,對於上帝爲什麼? – nyson

+1

這比有點奇怪。 ID通常是表的主鍵,這意味着你只有_one_。你如何期望得到多個,你爲什麼想要?其次,你在引用數字。除非它們存儲在字符數據類型中,否則請勿這樣做。請不要這樣做。 – Ben

+0

@Ben是的,ID是主要的。我需要從數組中獲取具有ID的所有行,看起來像「2,2,3,3,3」,並在此數組中添加相同ID的計數。 – droptheplot

回答

1

不知道你爲什麼會想要做這樣的事情,但不是用「在」條款,你可以使用一個內部查詢:

select * 
from `catalog` c, 
(
    select 2 ids 
    union all 
    select 2 
    union all 
    select 3 
    union all 
    select 3 
    union all 
    select 3 
) k 
where c.id = k.ids 
1

嘗試是這樣的:

SELECT t.p,count(*) FROM 
    catalog, 
    (SELECT 2 as id 
    Union all select 2 as id 
    Union all select 3 as id 
    Union all select 3 as id 
    Union all select 3 as id)as t 
where catalog.id = t.id 
+0

這是相同的AW101的答案 – Ben

+0

是的,這是真的,當我測試我的解決方案,還沒有AW101答案,我張貼它。 –

+0

和我以前發生的事情完全一樣;)偉大的思想家都認爲,+1 – AW101

0

create temporary table arrayt (id int); 
insert into arrayt values ('2'),('2'),('3'),('3'),('3'); 
select catalog.* from arrayt a LEFT JOIN catalog on (a.id=catalog.id); 

,如果你需要算

它可以用臨時表來完成

select count(catalog.id) as count,catalog.id as id from arrayt a LEFT JOIN catalog on (a.id=catalog.id) group by catalog.id;