Как мне проверить в базе данных SQL случайное число, которое я сгенерировал, уникальным, используя node.js? - PullRequest
0 голосов
/ 24 апреля 2020

Я настроил веб-приложение, которое выдает участникам случайное число, однако два человека не должны получать одно и то же число. Они вводят свое имя на веб-сайте и нажимают кнопку «ОК», чтобы получить их номер. Все эти данные (имя и случайно сгенерированное число, которые я генерирую с помощью уникального случайного модуля) отправляются в базу данных MySQL и сохраняются там для последующего использования - мне нужно узнать, кто получил какое число.

Проблема Я не могу найти способ проверить все числа, которые уже есть в базе данных, чтобы проверить, существует ли уже созданный номер, прежде чем отправить новое случайное число в базу данных вместе с именем человека.

Короче говоря, я хочу проверить столкновения с базой данных перед вставкой нового случайного числа, которое должно быть уникальным для каждой строки, всего может быть 100 чисел (1-100). Если код ловит коллизию, он должен сгенерировать новый номер и снова проверить его на коллизии.

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

Вот мой JavaScript код работает в node.js:

// Unique random number generator module
const uniqueRandom = require('unique-random');



// Extracts an array of objects from SQL database and transforms it into a normal array with vallues (numbers)
var sqlNumberArray = []; //this array stores all numbers from SQL database

con.query("SELECT number FROM person", function test(err, result, fields) {
  if (err) {
    throw err;
  } else {
    result.map(function(obj) {
      setValue(obj.number);
    });
  }
});

function setValue(value) {
  sqlNumberArray = value;
  console.log(sqlNumberArray);
};

// Checks if the random number is unique by comparing uniqueRandom to SQL entries
var numberWasChecked = ""
let random = uniqueRandom(1, 100);
var match = false;

for (var i = 0; i < sqlNumberArray.length && !match; i++) {
  if (sqlNumberArray[i] == random) {
    match = true;
  }
}
if (match) {
  window.alert("Please reload the page and try again, there was an error assigning you a number");
  console.log("Random made a duplicate number... Oops!")
} else {
  app.post('/createEntry', urlencodedParser, function(req, res, ) { //This code sends data to SQL
    let values = [String(req.body.name), String(random())];
    console.log(String(values));
    var insert = "INSERT INTO person (name, number) VALUES (?)"
    con.query(insert, [values], function(err, result) {
      if (err) throw err;
      console.log("A new value was inserted into database. Value input: " + values);
      res.render(path.join(__dirname + '/numberServe'), {
        number: values[1]
      });
    });
  });
}

Если код обнаруживает столкновение с базой данных, он должен перезапустить l oop и получить новый номер. Я новичок в JavaScript и вообще пишу код, я пытаюсь набрать asp все, но у меня просто недостаточно знаний, чтобы придумывать решения :( Я пытался заставить его работать целый день, но я ' м просто вне идей.

1 Ответ

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

Выбор заблаговременно для определения существующего номера зависит от условий гонки.

Так как вы хотите, чтобы номер был уникальным, объявите это в базе данных:

CREATE UNIQUE INDEX num_uniq person(number);

Если вы случитесь чтобы получить конфликт по INSERT, вы получите ошибку дублирующего ключа, после чего вы можете выбрать новый номер и вставить.

Если вы заполняете 100 человек 100 номерами, это вы может использовать код обработки исключений для запуска SELECT для примера используемых чисел и исключения их из пула случайных чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...