Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Номерация алфавита и перевод фразы в код. Сравнение с другими сообщениями в таблице (https://javascript.ru/forum/node-js-io-js/74810-nomeraciya-alfavita-i-perevod-frazy-v-kod-sravnenie-s-drugimi-soobshheniyami-v-tablice.html)

SorryHanzoMain 09.08.2018 06:48

Номерация алфавита и перевод фразы в код. Сравнение с другими сообщениями в таблице
 
Код
client.on("message",  request => {
    var NULL = "YOURBRAINS";
    const REQUIRED_PREFIX='?';
    const message=request.content.toString().trim();

    if(message.substr(0,1)!==REQUIRED_PREFIX)
    return false
       request.reply('Bad request');
    
    sql.run('INSERT INTO вопросы (вопрос) VALUES (?)',[message]);
});
Нужно чтобы сообщение переделывалось в код 00,00,00 подобно этому. А сами цифры будут обозначать буквы в алфавите
var а = 01. Так переходили сообщения и сравнивались с другими в таблице до всех совпадений.

Nexus 09.08.2018 09:56

SorryHanzoMain, если нужно проверить уникальность сообщения, то можно перед вставкой данных осуществить поиск этого вставляемого вопроса в таблице https://www.w3schools.com/sql/sql_where.asp.
Еще можно добавить полю "вопрос" уникальный ключ и модифицировать сам insert-запрос https://dev.mysql.com/doc/refman/5.5/en/insert.html

SorryHanzoMain 09.08.2018 13:12

Nexus
Да, всё почти получилось. Правда есть одно но. Как обозначить выполнение действие и не выполненное?
sql.get(`SELECT * FROM вопросы WHERE вопрос ='${message}'`).then(() => {
        if (2) {
            sql.run('INSERT INTO вопросы (вопрос) VALUES (?)', [message]).then(() => {
                request.reply("Извини, я этого пока не знаю, но это не надолго")
            })
            if() {
                sql.get(`SELECT * FROM вопросы WHERE trueorfalse ='${да}'`).then(да => {
                        if (да) {
                            request.reply("Да")
                        } else {
                            sql.get(`SELECT * FROM вопросы WHERE trueorfalse ='${нет}'`).then(нет => {
                                if (нет) {
                                    request.reply("Нет")
                                };
                            })

                        }
                    }




                )
            }
        }
    })
})

Конкретно здесь
if (2) {
            sql.run('INSERT INTO вопросы (вопрос) VALUES (?)', [message])
Выполнено ли действие
sql.get(`SELECT * FROM вопросы WHERE вопрос ='${message}'`)

И
if() {
                sql.get(`SELECT * FROM вопросы WHERE trueorfalse ='${да}'`)
Действие не выполнено.

Nexus 09.08.2018 13:55

SorryHanzoMain, не понимаю.
Что у вас происходит с кодом?
Часть запросов создается с использованием т.н. placeholder'ов, часть без.
Если driver бд умеет работать с плейсхолдерами, то используйте их.

Что у вас происходит с полями таблиц базы данных?
Почему часть полей имеет название содержащее кириллицу, часть латиницу?
Лучше именовать поля латиницей, если очень хочется кириллицу, то пусть так, но не стоит их смешивать.

Что с условиями в строках 2 и 6?
Условие в строке 2 всегда будет выполнено, в строке 6 синтаксическая ошибка.

Переменные кириллицей...
stackoverflow.com

Если в таблице нужно хранить значение "да" или "нет", то стоит создать поле с типом "tinyint".
https://dev.mysql.com/doc/refman/8.0...ger-types.html
Значением для поля должно быть строго 0 или 1, где 1 это "да", а 0 - "нет".

Что вы пытаетесь сделать начиная с шестой строки для меня загадка.

SorryHanzoMain 09.08.2018 14:33

Цитата:

Сообщение от Nexus (Сообщение 492229)
SorryHanzoMain, не понимаю.
Что с условиями в строках 2 и 6?

Во второй строке должно быть выражение, что это действие будет выполнено если совпадения не найдены.
В 6 строке должно быть это действие будет выполнено если совпадение найдено. После шестой строки идёт поиск сообщений да(после заменю на 1 и 0) и нет. Если да, то в чат да, если нет, то и в чат нет.

Nexus 09.08.2018 14:56

SorryHanzoMain,
sql.get('SELECT * FROM questions WHERE question LIKE ?',[message]).then(res=>{
    console.log(sql.constructor.name,...arguments);
});

Что в консоли отобразится?

SorryHanzoMain 09.08.2018 15:15

Цитата:

Сообщение от Nexus (Сообщение 492234)
SorryHanzoMain,
sql.get('SELECT * FROM questions WHERE question LIKE ?',[message]).then(res=>{
    console.log(sql.constructor.name,...arguments);
});

Что в консоли отобразится?

Database {} function require(path) {
try {
exports.requireDepth += 1;
return mod.require(path);
} finally {
exports.requireDepth -= 1;
}
} Module {
id: '.',
exports: {},
parent: null,
filename: 'C:\\Games\\Bot\\index.js',
loaded: true,
children:
[ Module {
id: 'C:\\Games\\Bot\\node_modules\\discord.js\\src\\in dex.js',
exports: [Object],
parent: [Circular],
filename: 'C:\\Games\\Bot\\node_modules\\discord.js\\src\\in dex.js',
loaded: true,
children: [Array],
paths: [Array] },
Module {
id: 'C:\\Games\\Bot\\config.json',
exports: [Object],
parent: [Circular],
filename: 'C:\\Games\\Bot\\config.json',
loaded: true,
children: [],
paths: [Array] },
Module {
id: 'C:\\Games\\Bot\\config_quest.json',
exports: [Object],
parent: [Circular],
filename: 'C:\\Games\\Bot\\config_quest.json',
loaded: true,
children: [],
paths: [Array] },
Module {
id: 'C:\\Games\\Bot\\node_modules\\sqlite\\main.js',
exports: [Object],
parent: [Circular],
filename: 'C:\\Games\\Bot\\node_modules\\sqlite\\main.js',
loaded: true,
children: [Array],
paths: [Array] },
Module {
id: 'C:\\Games\\Bot\\node_modules\\overwatch-js\\index.js',
exports: [Object],
parent: [Circular],
filename: 'C:\\Games\\Bot\\node_modules\\overwatch-js\\index.js',
loaded: true,
children: [Array],
paths: [Array] },
Module {
id: 'C:\\Games\\Bot\\node_modules\\discord-anti-spam\\anti_spam.js',
exports: [Function],
parent: [Circular],
filename: 'C:\\Games\\Bot\\node_modules\\discord-anti-spam\\anti_spam.js',
loaded: true,
children: [],
paths: [Array] } ],
paths:
[ 'C:\\Games\\Bot\\node_modules',
'C:\\Games\\node_modules',
'C:\\node_modules' ] } C:\Games\Bot\index.js C:\Games\Bot

Nexus 09.08.2018 15:30

SorryHanzoMain, бесполезная информация)
Какой драйвер бд используете?

SorryHanzoMain 09.08.2018 15:32

Что значит драйвер? Я использую таблицу SQLite

Nexus 09.08.2018 15:39

SorryHanzoMain, как переменную "sql" получили?


Часовой пояс GMT +3, время: 02:49.