Как мне убрать пометки в отформатированном запросе mysql? - PullRequest
0 голосов
/ 01 ноября 2019

Хорошо, поэтому я извлек некоторые значения в Excel с помощью пакета npm 'xlsx', и я хочу выполнить запрос MySql с отформатированным результатом.

Извлечение в Excel

    let wb= xlsx.readFile(filePath);         //GET WORKBOOK
    let ws= wb.Sheets[wb.SheetNames[0]];     //SELECT THE FIRST SHEET IN THE ARRAY
    let data= xlsx.utils.sheet_to_json(ws);  //CONVERT DATA TO JSON OBJECT
    let s ='';                               //CREATE VARIABLE TO HOLD FORMATTED STRING
    for(let i=0; i<data.length; i++){
        s+= "'" + data[i].id +"',";       //FORMAT OBJECT TO STRING
    }
    let fullString= s.substr(0, s.length-1); //STORE FORMATED STRING IN VARIABLE REMOVING FINAL COMMA (,)

Форматированная строка выглядит так:

'2019-0027178','2019-0027179','2019-0027180','2019-0027181','2019-0027182','2019-0027183'

Запрос MySql выглядит так:

SELECT name, email, phone FROM persons WHERE id IN (?),
[fullString]

Что ожидается:

Объект json, содержащий запрошенную информацию, например:

[{name: "John", email: "john.doe@email.com", phone: "123456789"}, ... ]

Фактический результат:

Пустой массиввот так:

[]

Расследование и мысли

Я обнаружил, что в строку запроса добавлялись пометки:

... WHERE id IN (`'2019-0027178','2019-0027179','2019-0027180','2019-0027181','2019-0027182','2019-0027183'`)

Актуальный актуальный основной вопрос:

Есть ли что-то, что я делаю не так или есть правильный способ сделать это?

РЕДАКТИРОВАТЬ!

Так что за один вопросительный знак т.е. ... WHERE id in (?), я получаю пустой объект, как указано выше. Но для двух вопросительных знаков т.е. ... WHERE id IN (??), я получаю эту ошибку:

{
    "code": "ER_BAD_FIELD_ERROR",
    "errno": 1054,
    "sqlMessage": "Unknown column ''2019-0027178','2019-0027179','2019-0027180','2019-0027181','2019-0027182','2019-0027183' in 'where clause'",
    "sqlState": "42S22",
    "index": 0,
    "sql": "SELECT name, email, phone FROM persons WHERE id IN (`'2019-0027178','2019-0027179','2019-0027180','2019-0027181','2019-0027182','2019-0027183'`)"
}

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Хорошо, я решил, что могу просто «подготовить» запрос перед его выполнением.

~ РЕШЕНИЕ ~

Вместо того, чтобы делать это let fullString= s.substr(0, s.length-1); перед передачей fullString в качестве параметра строки запроса, я просто сделал это:

let fullString= `SELECT name, email, phone FROM persons WHERE id IN (${s.substr(0, s.length-1)})`;

Затем передал fullString вместо того, где был фактический запрос.

Спасибо.

0 голосов
/ 01 ноября 2019

Допустим, у вас есть таблица с именем personfilter с ключом столбцов и personid. Затем вы генерируете уникальный ключ. Например, 27. Тогда следующее будет делать то, что вы хотите:

INSERT INTO personfilter(key,personid)
  values
     (27, '2019-0027178'),
     (27, '2019-0027179'),
     (27, '2019-0027180'),
     (27, '2019-0027181'),
     (27, '2019-0027182'),
     (27, '2019-0027183')

Тогда вы можете сделать следующее, выбрав

SELECT name, email, phone 
FROM persons
JOIN personfilter on personfilter.key = 27 and personfilter.personid = persons.id
...