У меня есть два стола … один для сеанса игрока … и один для персонажа игрока. Я не могу изменить способ записи данных в таблицах … поэтому мне приходится работать с ними. В конечном счете, я пытаюсь создать список «кто онлайн», и мне нужна помощь, чтобы понять, как все это отсортировать.
сеансы аккаунта (если в этом списке присутствует строка, аккаунт авторизуется)
----------------------
| 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 |
------------------------------------
Я пытаюсь заказать онлайн, а затем имя персонажа. Так что в соответствии с этими таблицами … Я бы хотел распечатать как это:
ОНЛАЙН
user1
user3
user6
НЕ В СЕТИ
user2
user4
USER5
Какой запрос я использую для распечатки таких данных, когда он использует две таблицы и сортирует по именам символов второй таблицы … и находятся ли они в сети — две разные сортировки из двух разных таблиц?
Если бы в таблице сессий были имена персонажей … это сделало бы это намного проще … но я не думаю, что смогу изменить это сам. 🙁 Любая помощь?
Попробуйте что-то вроде этого
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 и статусом, сначала онлайн.
Вы могли бы получить больше с функцией GROUP_CONCAT тоже
Других решений пока нет …