2015-06-13 43 views
0

大家好我有一个问题,我无法解决。我正在为比赛做一对生成器。Php Mysql:通过2用户ID检索2个用户名

我有两个表。 第一个表格包含用户名和用户标识。 第二个表包含match_id,圆形,user1_id,user2_id

Table 1 

user_id username 
21   John 
22   Peter 
23   Ana 
24   Dan 


Table 2 
match_id round user1_id user2_id 
1   1  21   22 
2   1  23   24 
3   2  21   23 
4   2  24   22 
. 
. 
. 

我想呼应

Round 1 
John - Peter 
Ana - Dan 

Round 2 
John - Ana 
Dan - Peter 

Round 3 
... 

Round 4 
... 

能把它只有一个SQL代码来完成,所以我可以从表1同时获得用户名的user1_id和user2_id?

要通过USER_ID只检索一个用户名我没有问题,和它的工作的伟大:

$sql = "SELECT table1.username, table3.won 
     FROM table1 
     INNER JOIN table3 ON table1.user_id=table3.user_id;"; 

我知道我可以代替使用user_ids表2中只使用用户名,但我想去做这个就像我上面解释的那样。

回答

0
select CONCAT((select username from table1 t1 where t.user_id=t1.user_id=t.user_id) ,'-',(select username from table1 t1 where t.user_id=t1.user_id=t.user_id)) from table2 t 

OR

select CONCAT(t1.username,'-',t3.username) from table2 t2 
    inner join table1 t1 on t1.user_id=t2.user_id 
    inner join table1 t3 on t3.user_id=t2.user_id 
+0

Thx,这是工作。你让我知道如何用CONCAT获得更好的解决方案。 – phpguy11

+0

高兴地帮助你.. :) – Ravi

0

您可以使用这样的

SELECT T1.USERID_1, T2.USERID_2 FROM TABLE2 T1 JOIN TABLE2 T2 ON T1.MATCH_ID = T2.MATCH_ID

后来呼应的结果

echo 'Round 1 <br \>'; echo $result1.' vs '.$result2;

**

UPDATE

**

SELECT t1_1.name|| ' vs ' || t1_2.name 
FROM table_2 t2 


JOIN table_1 t1_1 
ON t2.user1_id = t1.user_id 


JOIN table_1 t1_2 
ON t2.user2_id = t2.user_id 

where t2.match_id = 1; 

这可以帮助你。如果不是...

+0

我想我已经refered到表2.请再次检查。 –

+0

我想通过来自sql查询的user_id而不是user_ids来回应每个玩家的用户名。 – phpguy11

+0

'SELECT t1_1.name || 'vs'|| t1_2.name FROM TABLE_2 T2 JOIN TABLE_1 T1_1 ON t2.user1_id = t1.user_id JOIN TABLE_1 t1_2 ON t2.user2_id = t2.user_id 其中t2.match_id = 1;'这可能有助于你终于。 –

0
$sql = "SELECT table1.username FROM table1 WHERE user_id IN (SELECT table2.user_id1,table2.user_id2 FROM table2 WHERE table2.match_id = 1); 

它会帮助你得到你的需要。

尝试这样的事情.....

0

我觉得这样的事情应该工作:

SELECT 
    CONCAT('Round ', CAST(round As varchar(2)), '\n') As round, 
    GROUP_CONCAT(usernames SEPARATOR '\n') As 
FROM (
SELECT 
    round, 
    CONCAT(t1.username, ' - ', t2.username) As usernames 
FROM 
    Table2 t 
    JOIN 
    Table1 t1 ON t.user1_id = t1.user_id 
    JOIN 
    Table1 t2 ON t.user2_id = t2.user_id) As dt 
GROUP BY 
    round