【问题标题】:Two Tables & Ordering By Column Not in Both两个表和按列排序不在两者中
【发布时间】:2014-11-04 01:09:44
【问题描述】:

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

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

----------------------
| 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    |
------------------------------------

我正在尝试通过在线订购,然后是角色名称。所以根据这些表格..我想要这样的打印输出:

在线 用户1 用户3 用户6

离线 用户2 用户4 用户5

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

如果会话表中有角色名称.. 它会让这一切变得容易得多.. 但我不认为我可以自己更改它。 :( 有什么帮助吗?

【问题讨论】:

  • 你的charid和accountid在两张表中翻转
  • 这就是他们在表格中的样子。有一个显示帐户的会话表 - 纯粹是为了确定他们是否已登录以及他们正在玩哪个角色。然后字符表显示有关该字符的附加信息。即使我切换了两列..仍然不知道如何按照我想要的方式对它们进行排序。

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


【解决方案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

这应该给你一个包含字符名和状态的两列表,首先是在线的。 您也可以使用 GROUP_CONCAT 函数变得更有趣

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多