2011-09-08 152 views
0

我有表名为集合,其中有场pk_collectionid需要帮助MySQL的关于在第

我生成含有由逗号分隔的集合ID的字符串。格式为:1,1

我想要从集合表字符串中提到的所有ID的名称。

我已经使用IN clause under mysql

我的查询是:

SELECT name 
FROM `collections` 
WHERE `pk_collectionid` 
IN (1, 1) 

现在它正在产生一行的ID是常见的,但我想它应该显示两行,而不是一个即使ID是一样的。

+0

为什么你想这样做? – Clive

+0

我认为数据库存在设计问题。如果一个ID不是唯一的... – trampi

+0

这个表上的索引是什么?它是独一无二的吗? –

回答

3

这是一个很奇怪的规定。我能想到的唯一的解决办法是使用UNION ALL查询:

SELECT name FROM `collections` WHERE `pk_collectionid` = 1 
UNION ALL 
SELECT name FROM `collections` WHERE `pk_collectionid` = 1 
-- UNION ALL 
-- SELECT name FROM `collections` WHERE `pk_collectionid` = 2 
-- UNION ALL 
-- SELECT name FROM `collections` WHERE `pk_collectionid` = 3 
-- ... 
+0

谢谢salman回复。你建议的代码工作正常,但问题是它的静态。我将通过php运行此查询,我可以将该变量传递给in子句。对于例如$ collectionids = 1,1在查询中,我将使用来自集合的select name,其中pk_collectionid IN(。$ collectionids。) –

+0

只需构建字符串“1,1”的方式,就可以在PHP中构建查询。 –

+0

谢谢我使用你的建议,并相应地修改了查询,它工作正常。 –

2

你不应该尝试重复的行从查询回来 - 这是没有必要的,这是浪费,这将是一个痛苦的实行。

而不是做这个的,创建地图id从你的结果集的整行。然后,您可以遍历包含重复ID(您首先用来构造查询的ID)的集合,并使用每个ID索引到您创建的映射中。这样你可以根据需要多次单独处理每条记录。

如果你提到你所使用的语言,我们也可以给与代码的例子。

+0

谢谢jon回复。我正在使用PHP。 $ collectionids = 1,1;从集合中选择名称,其中pk_collectionid IN(。$ collectionids。) –

+0

@Pankaj:您使用的是哪个数据库访问层?显示一些代码,将结果放入数组中,或循环使用(不管你有什么)。 – Jon