2013-10-21 72 views
0

首先,对于分类的目的,可能有人想出一个更好的名字来索引这是?加入不同colums表单科拉姆

其次,我有一个表,我想从另一个表的用户名抢两列在同一个表。

SELECT ignite_board.*,username AS 'name' 
FROM ignite_board,user_info 
WHERE bnumber = 3 
AND ignite_board.uid = user_info.id 
ORDER BY POSITION 

获取我:

ID bnumber position UID qual time  following name 
1176 3  1   442 2  1382045726 440  bb1 
1177 3  2   445 2  1382045936 442  bb4 
1181 3  3   450 2  1382050220 449  bb6 
1178 3  4   446 2  1382050371 439  aa2 
1209 3  5   466 1  1382050130 450  bb8 
1212 3  6   469 2  1382050502 467  bb10 
1210 3  7   467 1  1382050172 466  bb9 
1232 3  8   475 1  1382050415 446  aa7 
1180 3  9   444 0  1382045690 445  bb3 
1214 3  10  471 0  1382050220 466  bb11 
1233 3  11  476 0  1382050415 475  aa8 
1179 3  12  441 0  1382045562 475  aa1 
1182 3  13  452 0  1382046032 448  aa6 
1216 3  14  473 0  1382050272 469  bb12 
1234 3  15  477 0  1382050502 469  bb16 
1271 3  16  454 0  1382306814 442  bb7 

但我需要得到用户名和下面的用户名(八九不离十这样)

SELECT ignite_board.*,username AS 'name',username AS 'following' 
FROM ignite_board,user_info 
WHERE bnumber = 3 
AND ignite_board.uid = user_info.id 
AND ignite_board.following = user_info.id 
ORDER BY POSITION 
+0

你们都是正确的,我把它给谁回答第一个虽然人。 非常感谢! – Sparatan117

+0

除非你真的知道自己在做什么(很明显,你不知道),你应该避免隐式(逗号式)连接。按照我的示例,始终使用“explcit”JOIN语法。这使我们人类的查询变得更容易:a)理解和b)适应。 – Strawberry

+0

是的,我会继续,并指责我那个适当的教授。我有一种感觉,有一种更好的方式来做到这一点,并且我们正在被教导的快捷方法,只是...“工作”或多或少。好的事情知道未来的记录 – Sparatan117

回答

1
SELECT b.* 
    , u.username name 
    , f.username following 
    FROM ignite_board b 
    JOIN user_info u 
    ON u.id = b.uid 
    JOIN user_info f 
    ON f.id = b.following 
WHERE bnumber = 3 
ORDER 
    BY position; 
1

你必须加入user_info表两次,并给每个实例一个不同的别名:

SELECT ignite_board.*,u.username AS 'name',f.username AS 'following' 
FROM ignite_board,user_info u, user_info f 
WHERE bnumber = 3 
AND ignite_board.uid = u.id 
AND ignite_board.following = f.id 
ORDER BY POSITION