#sql #mariadb
Вопрос:
Вопрос может быть немного странным… Я работаю с двумя столами:
MariaDB [criticaldb]> select * from commands;
-------- ---------- ----------------------------------------------------------------------------------------------------------------
| cmd_id | command | description |
-------- ---------- ----------------------------------------------------------------------------------------------------------------
| 1 | help | Provides a list of available commands. |
| 2 | announce | Generates an announcement of the message specified after the command. |
| 3 | hotfix | Prints a hotfix of the message specified after the command. |
| 4 | change | Prints a changelog of the message specified after the command. |
| 5 | quote | Generates a quote for the mentioned person with a custom string of text. |
| 6 | embed | Generates an embed with an ID. use `embed create ID`. Embeds and their IDs are saved in `./dicts/embeds.json`. |
| 7 | hug | Use this command to hug someone or to demand hugs from others. |
| 8 | ttt | Challenge another member to a game of Tic Tac Toe! |
-------- ---------- ----------------------------------------------------------------------------------------------------------------
MariaDB [criticaldb]> select * from permissions;
-------------------- ------ ------ ------ ------ ---------- ----------- ------- ------ -------- ------ ------- ------
| server_id | warn | mute | kick | ban | announce | changelog | embed | help | hotfix | hug | quote | ttt |
-------------------- ------ ------ ------ ------ ---------- ----------- ------- ------ -------- ------ ------- ------
| 846354366851448842 | 2 | 2 | 3 | 4 | 4 | 4 | 4 | 1 | 4 | 0 | 0 | 0 |
-------------------- ------ ------ ------ ------ ---------- ----------- ------- ------ -------- ------ ------- ------
Я пытаюсь сделать следующее: Игнорируя cmd_id из таблицы команд, я бы хотел, чтобы была выбрана команда, описание из таблицы команд, если для команды в таблице разрешений выполнено определенное условие, например, значение команды в таблице разрешений
Так что в этом случае выбор, который я хотел бы получить в результате, был бы
---------- ----------------------------------------------------------------------------------------------------------------
| command | description |
---------- ----------------------------------------------------------------------------------------------------------------
| help | Provides a list of available commands. |
| quote | Generates a quote for the mentioned person with a custom string of text. |
| hug | Use this command to hug someone or to demand hugs from others. |
| ttt | Challenge another member to a game of Tic Tac Toe! |
---------- ----------------------------------------------------------------------------------------------------------------
Я надеюсь, что это возможно. Мне удалось «преобразовать» имена столбцов таблицы разрешений в значения столбцов для выбора, подобного этому:
MariaDB [criticaldb]> select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = N'permissions';
-------------
| COLUMN_NAME |
-------------
| server_id |
| warn |
| mute |
| kick |
| ban |
| announce |
| changelog |
| embed |
| help |
| hotfix |
| hug |
| quote |
| ttt |
-------------
Я надеюсь, что не прошу ничего невозможного, и я был бы признателен за любой ответ!
Комментарии:
1. Это невозможно без использования динамического SQL для построения запроса. Я бы посоветовал вам рассмотреть возможность переформатирования
permissions
, чтобы иметь только 3 столбцаserver_id, command, permissions
, тогда это становится тривиальным. Как правило, относительно легко свернуть эту форму данных, чтобы создать внешний вид вашей текущей таблицы разрешений (если это требуется) в вашем прикладном программном обеспечении.2. Я понимаю, что вы имеете в виду, спасибо. Я думаю, что это хорошая альтернатива тому, что я пытаюсь сделать уже более 2 часов.