两张桌子&按列排序不在两者中

时间:2014-11-04 01:09:44

标签: php mysql select sql-order-by union

我有两张桌子......一张用于玩家的会话......一张用于玩家的角色。我无法改变表格记录数据的方式..所以我必须使用这些。最终,我正在尝试创建一个“谁在线”列表,并需要一些帮助来确定如何对它进行排序。

帐户会话(如果此列表中有一行,则帐户已登录)

----------------------
| accountid | charid |
----------------------
| 1001      | 2001   |
----------------------
| 1004      | 2006   |
----------------------
| 1002      | 2003   |
----------------------

字符(显示所有处于活动状态的字符)

------------------------------------
| charid    | accountid | charname |
------------------------------------
| 1001      | 2001      | user1    |
------------------------------------
| 1002      | 2001      | user2    |
------------------------------------
| 1003      | 2002      | user3    |
------------------------------------
| 1004      | 2002      | user4    |
------------------------------------
| 1005      | 2003      | user5    |
------------------------------------
| 1006      | 2004      | user6    |
------------------------------------

我正在尝试在线订购,后跟字符名称。所以根据那些表...我想要这样的打印输出:

ONLINE USER1 用户3 user6

OFFLINE 用户2 USER4 USER5

我使用什么查询来打印数据,例如当它使用两个表并按第二个表字符名称排序时...以及它们是否在线 - 两个不同表中的两个不同的排序?

如果会话表中有角色名称..它会使这更容易......但我不认为我可以自己改变。 :(任何帮助?

1 个答案:

答案 0 :(得分:1)

尝试这样的事情

SELECT      charname, IF(sessions.charid IS NULL, 'offline', 'online') as status
FROM        characters
LEFT JOIN   sessions
ON          characters.charid=sessions.charid
AND         characters.accountid=sessions.accountid
ORDER BY    status DESC, charname ASC

这应该为您提供一个带有charname和status的两列表,首先是在线。 您也可以使用GROUP_CONCAT功能来获得更多功能