Подсчитать количество массивов в базе данных - PullRequest
2 голосов
/ 02 апреля 2020

У меня есть база данных, и я выложу пример.

guildid    botid
1234       ["2345","3456","3714","1812"]
9876       ["8765","5432"]
4346       NULL
2371       ["3179"]
1254       NULL
1257       ["1721","7104","8265"]
8321       NULL

Мне нужно вывести количество ботидов, в этом примере ответ = 10. В БД 7 записей, но всего 10 идентификаторов, которые не равны NULL. Обычно я делал бы SELECT count(*) FROM watchedbots Однако это только подсчитывает, сколько существует записей. В некоторых случаях ботид также может быть NULL, поэтому мне нужно, чтобы он игнорировал пустые записи. Я довольно нов, когда дело доходит до массивов, поэтому любая помощь будет оценена. Модуль, который я использую для SQL: better-sqlite3

Редактировать: развернуть пример

Если я сделаю следующее:

const dataGrab = db.prepare('SELECT botid FROM watchedbots').all()
const stringify = JSON.stringify(dataGrab)
console.log(stringify)

Я получу вывод: [{"botid":null},{"botid":null},{"botid":null},{"botid":"["1721","7104","8265"]"},{"botid":"["2345","3456","3714","1812"]"},{"botid":"["3179"]"},{"botid":"["8765","5432"]"}] То, что я предполагаю, является хорошим следующим шагом, хотя я не уверен, куда бы я go оттуда.

1 Ответ

1 голос
/ 03 апреля 2020

Я думаю, что ваш самый простой способ - перебирать базовый массив.

let count = 0;
for(guild of dataGrab) {
    if(guild.botid) {
        let arr = guild.botid.slice(1, guild.botid.length -1).split(',');
        count += arr.length;
    }
}
console.log(count);
...