2015-06-13 2 views
0

Привет всем У меня есть одна проблема, которую я не могу решить. Я делаю парный генератор для турнира.Php Mysql: Извлечение 2 имен пользователей через 2 пользователя id

У меня есть две таблицы. Первая таблица содержит имена пользователей и пользователей. Вторая таблица содержит 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, так что я могу получить как имена пользователей из Table1 для 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 в Table2 использовать только имена пользователей, но я хотел бы сделать это таким как я объяснил выше.

ответ

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 

ИЛИ

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

Я хочу, чтобы echo имя пользователя каждого игрока через user_ids из sql-запроса не только user_ids. – phpguy11

+0

'SELECT t1_1.name || 'vs' || t1_2.name ОТ table_2 t2 РЕГИСТРИРУЙТЕСЬ table_1 t1_1 ПО t2.user1_id = t1.user_id РЕГИСТРИРУЙТЕСЬ table_1 t1_2 ПО 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