我有两张桌子......一张用于玩家的会话......一张用于玩家的角色。我无法改变表格记录数据的方式..所以我必须使用这些。最终,我正在尝试创建一个“谁在线”列表,并需要一些帮助来确定如何对它进行排序。
帐户会话(如果此列表中有一行,则帐户已登录)
----------------------
| 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
我使用什么查询来打印数据,例如当它使用两个表并按第二个表字符名称排序时...以及它们是否在线 - 两个不同表中的两个不同的排序?
如果会话表中有角色名称..它会使这更容易......但我不认为我可以自己改变。 :(任何帮助?
答案 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功能来获得更多功能