Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两张桌子&;按列排序,而不是同时按列排序_Php_Mysql_Select_Sql Order By_Union - Fatal编程技术网

Php 两张桌子&;按列排序,而不是同时按列排序

Php 两张桌子&;按列排序,而不是同时按列排序,php,mysql,select,sql-order-by,union,Php,Mysql,Select,Sql Order By,Union,我有两张桌子。。一个用于球员的训练。。一个是玩家的角色。我无法更改表记录数据的方式。。所以我必须和这些人一起工作。最终,我正在尝试创建一个“谁在线”列表,需要一些帮助来确定如何对其进行排序 帐户会话(如果此列表中存在一行,则表示帐户已登录) 字符(显示所有激活或未激活的字符) 我试着在线订购,后跟字符名。所以根据这些表格。。我想要这样的打印件: 在线 用户1 用户3 用户6 离线 用户2 用户4 用户5 当使用两个表并按第二个表字符名排序时,我使用什么查询来打印这样的数据。。不管他们是否在线——

我有两张桌子。。一个用于球员的训练。。一个是玩家的角色。我无法更改表记录数据的方式。。所以我必须和这些人一起工作。最终,我正在尝试创建一个“谁在线”列表,需要一些帮助来确定如何对其进行排序

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

字符(显示所有激活或未激活的字符)

我试着在线订购,后跟字符名。所以根据这些表格。。我想要这样的打印件:

在线 用户1 用户3 用户6

离线 用户2 用户4 用户5

当使用两个表并按第二个表字符名排序时,我使用什么查询来打印这样的数据。。不管他们是否在线——从两个不同的表中进行两种不同的排序


如果会话表中有字符名。。这会让事情变得容易很多。。但我认为我自己无法改变这一点(有什么帮助吗?

试试这样的方法

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,首先是online。
你也可以使用GROUP_CONCAT函数来增加兴趣

你的charid和accountid在两个表中翻转,这就是它们在表中的方式。有一个会话表显示帐户-纯粹是为了确定它们是否登录以及它们正在播放的字符。然后character表显示关于该字符的其他信息即使我把这两个栏目换了一换,我还是不知道如何按照我想要的方式对它们进行排序。
------------------------------------
| charid    | accountid | charname |
------------------------------------
| 1001      | 2001      | user1    |
------------------------------------
| 1002      | 2001      | user2    |
------------------------------------
| 1003      | 2002      | user3    |
------------------------------------
| 1004      | 2002      | user4    |
------------------------------------
| 1005      | 2003      | user5    |
------------------------------------
| 1006      | 2004      | user6    |
------------------------------------
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