2009-02-25 111 views
1

我被困在试图找出下面的问题的解决方案。 这很复杂。所以和我保持一致。mysql和php:数据提取

我从有他的朋友的用户ID在CSV 的形式user表中检索的字段(3,4,5,6,7)

还有一种叫表transaction它看起来像这

tid user1 user2 type_of_trade 
1  3  4  barter 
2  5  6  share 
3  6  7  bargain 
4  4  3  barter 
5  3  7  share 

现在我需要显示我的朋友的交易。

所以我分裂CSV,把它们放在一个数组,并为每个朋友我运行查询

friends = explode(",","3,4,5,6,7"); 

for($i=0;$i<=count(friends);$i++) 
{ 
// I execute this--SELECT * FROM transaction WHERE user1 = friends[$i] or user2 = friends[$i] 
} 

现在同样的情况3,4,5,6,7

当查询执行4时,同样的结果来了,因此我得到重复。 我试过了一切。但我无法弄清楚这一点。

有人可以请建议一个更好的解决方案,或者可以修改它本身吗?

回答

3

在这个特例中,做不是explode吧。

SELECT * FROM transaction WHERE user1 IN (3, 4, 5, 6, 7) OR user2 IN (3, 4, 5, 6, 7) 
+0

SELECT DISTINCT * FROM ... – vartec 2009-02-25 12:00:10

0

您应该使用mysql IN() function。这将保证独特的结果。

SELECT * FROM transactions WHERE user1 IN (3,4,5,6,7) OR user2 IN (3,4,5,6,7); 
0

你可以做一个比较IN

SELECT DISTINCT * 
FROM transaction 
WHERE user1 IN (3,4,5,6,7) OR user2 IN (3,4,5,6,7) 
0

如果你可以在任何更改数据库的设计,我会建议使用一个多对多的关系,为您的用户朋友。

这将允许您存储用户朋友的列表,而无需解析CSV。

在PHP中执行此操作mysql在这里; tonymarston.net,仅仅是google的第一个结果:'mysql many to many'。