node.js выберите результаты запроса для отправки в качестве ответа бота телеграммы - PullRequest
0 голосов
/ 06 апреля 2020

Нужна небольшая помощь, чтобы понять MySQL результат запроса. Есть таблица authors со столбцами AuthorID, FirstName, ..., SearchName. Я хотел бы выбрать из него и отправить значения SearchName в качестве ответа бота

Таким образом:

bot.on('text', (ctx) => {
const q = ctx.message.text //here I recieve a message to bot as a string to use in select
const sql = "SELECT SearchName FROM authors WHERE LastName LIKE '%"+ q +"%'";
connection.query(sql, function(err, results) {

    if(err) console.log(err);
    console.log(results);
    ctx.reply(results);
    console.log(q);
});
})

Таким образом, это приводит к консоли:

  TextRow { SearchName: 'ПЕТРОВА ЮЛИЯ ИГОРЕВНА' },
  TextRow { SearchName: 'ПЕТРОВА ЕЛЕНА ВЛАДИМИРОВНА' },
  TextRow { SearchName: 'ПЕТРОВА ИРИНА ВЛАДИМИРОВНА' },
  TextRow { SearchName: 'ПЕТРОВА В К' },
  TextRow { SearchName: 'ПЕТРОВА ВЛАДИНАТА' },
  TextRow { SearchName: 'ПЕТРОВА ИРИНА' },

и, конечно же, те же данные, но не верное представление в ответе бота:

 [{"SearchName":"ПЕТРОВА ЮЛИЯ ИГОРЕВНА"},{"SearchName":"ПЕТРОВА ЕЛЕНА ВЛАДИМИРОВНА"},{"SearchName":"ПЕТРОВА ИРИНА ВЛАДИМИРОВНА"},{"SearchName":"ПЕТРОВА В К"},{"SearchName":"ПЕТРОВА ВЛАДИНАТА"},{"SearchName":"ПЕТРОВА ИРИНА"},

Итак, я прошу помощи, как получить только значения, и в дальнейшем я бы хотел управлять ими как отдельными ответами от бот для пользователя. т. е. пользователь отправляет строку и получает столько ответов, сколько возвращается строк.

1 Ответ

0 голосов
/ 08 апреля 2020

Все, что осталось сделать, - это просто l oop просмотреть результаты в обратном вызове db query, обработать и отправить сообщения боту туда. Вот пример,

bot.on('text', (ctx) => {
    const q = ctx.message.text //here I recieve a message to bot as a string to use in select
    const sql = "SELECT SearchName FROM authors WHERE LastName LIKE '%"+ q +"%'";

    connection.query(sql, function(err, results) {
        if(err) console.log(err);
        console.log(results);

        for (const result of results) { // each row
            ctx.reply(result.SearchName); // send the SearchName field from the object
        }
    });
})
...