let mysql = require('mysql');
let con = mysql.createConnection({
host: "127.0.0.1",
user: "root",
password: "",
database: "mania"
});
let qry =`SELECT * FROM price_history_1d;`;
con.connect(function (err) {
if (err) throw err;
console.log("Connected!");
con.query(qry, function (err, results) {
if (err) throw err;
results.forEach((row) => {
console.log(`ID: ${row['birza']}, NAME: ${row['symbol']}, AGE: ${row['price']}`);
/// получаю вот такой результат
//ID: 570, NAME: someone, AGE: 0.4567
//ID: 571, NAME: someone2, AGE: 0.777
//ID: 571, NAME: dd, AGE: 0.4890
//ID: 571, NAME: dd, AGE: 5.111
// а нужно так как показано ниже.
// Каждое значение из таблицы получает свою переменную для дальнейшей работы
});
});
con.end();
});
// вывести данные за пределы функции. И далее с ними работать
let id some1=570; let name1 =someone; let sumAGEres1=0.4567;
let id some2=570; let name2 =someone2; let sumAGEres2=0.777;
let id some3=570; let name3 =dd; let sumAGEres3=0.4890;
let id some4=570; let name4 =dd; let sumAGEres4=5.111; async/await для асинхронных операций, вы можете использовать библиотеку mysql2/promise, которая поддерживает промисы и позволяет использовать async/await. Вот пример того, как можно реализовать ваш запрос:const mysql = require('mysql2/promise');
async function getData() {
const connection = await mysql.createConnection({
host: "127.0.0.1",
user: "root",
password: "",
database: "mania"
});
try {
const [rows, fields] = await connection.execute('SELECT * FROM price_history_1d');
for (let row of rows) {
console.log(`ID: ${row['birza']}, NAME: ${row['symbol']}, PRICE: ${row['price']}`);
// Теперь вы можете работать с каждой строкой данных как с объектом
// Например, вы можете сохранить данные в переменные или отправить их куда-либо
}
} catch (err) {
console.error(err);
} finally {
await connection.end();
}
}
getData();getData, которая устанавливает соединение с базой данных, выполняет запрос и выводит результаты. Каждая строка результатов обрабатывается в цикле, и вы можете сохранять данные в переменные или использовать их для других операций внутри цикла.mysql2/promise вам нужно будет установить этот пакет через npm:npm install mysql2async/await позволяет писать асинхронный код, который выглядит как синхронный, и делает его более читаемым и удобным для отладки.
async, вы можете использовать глобальные переменные или возвращать данные из функции и обрабатывать их дальше. Вот пример с использованием глобальных переменных:const mysql = require('mysql2/promise');
let globalData = []; // Глобальный массив для хранения данных
async function getData() {
const connection = await mysql.createConnection({
host: "127.0.0.1",
user: "root",
password: "",
database: "mania"
});
try {
const [rows, fields] = await connection.execute('SELECT * FROM price_history_1d');
globalData = rows.map(row => {
return {
id: row['birza'],
name: row['symbol'],
price: row['price']
};
});
} catch (err) {
console.error(err);
} finally {
await connection.end();
}
}
getData().then(() => {
// После завершения функции getData, данные будут доступны в globalData
console.log(globalData); // Выводим данные в консоль
// Теперь вы можете использовать globalData как угодно
});globalDataпосле выполнения функции getData. Затем вы можете использовать этот массив в любом месте вашего кода.async function getData() {
// ... код функции getData ...
return globalData; // Возвращаем данные
}
getData().then((data) => {
// Обрабатываем данные после вызова функции
console.log(data); // Выводим данные в консоль
});dataбудет содержать данные, возвращенные функцией getData, и вы можете работать с ними так, как вам нужно. Это более предпочтительный способ работы с асинхронными данными, так как он не зависит от глобального состояния.
const mysql = require('mysql2/promise');
let XX = 0; // Изначально объявленная переменная
async function getData() {
const connection = await mysql.createConnection({
host: "127.0.0.1",
user: "root",
password: "",
database: "mania"
});
try {
const [rows, fields] = await connection.execute('SELECT * FROM price_history_1d');
// Обработка полученных данных
const user = rows.find(user => user.name === 'someone2');
if (user) {
XX = parseFloat(user.price);
}
return rows; // Возвращаем все строки для дальнейшего использования
} catch (err) {
console.error(err);
} finally {
await connection.end();
}
}
getData().then((data) => {
// Данные доступны здесь, в переменной data
console.log(XX); // Выводим значение XX, которое было обновлено функцией getData
});
getDataасинхронно получает данные из базы данных и ищет пользователя с именем someone2. Если такой пользователь найден, его priceприсваивается переменной XX. После выполнения функции getData, данные доступны в переменной data, и вы можете использовать их по своему усмотрению. Обратите внимание, что XXобновляется внутри функции getDataи выводится после того, как функция завершает свою работу.
someone2на основе данных, полученных из вебсокета, вы можете сделать это следующим образом:let someone2 = 0; // Изначально объявленная переменная
// Предположим, что data - это данные, полученные из вебсокета
const data = { id: 571, name: 'someone2', price: '0.45678977000000' };
// Обновляем значение переменной someone2
someone2 = parseFloat(data.price);
console.log(someone2); // Выводим обновленное значение someone2priceиз объекта dataпреобразуется в число с плавающей точкой и присваивается переменной someone2. Теперь переменная someone2содержит значение 0.45678977000000. Это значение вы можете использовать в дальнейшем коде.
const prices = {}; // Объект для хранения цен
async function updatePrices() {
// Предположим, что rows - это массив данных, полученный из базы данных
const rows = [
{ id: 570, name: 'someone', price: '0.45678977000000' },
{ id: 571, name: 'someone2', price: '0.45678977000000' },
// ... другие записи ...
];
// Обновляем объект prices, используя имя как ключ
rows.forEach(row => {
prices[row.name] = parseFloat(row.price);
});
}
// Вызываем функцию для обновления цен
updatePrices().then(() => {
console.log(prices); // Выводим обновленные цены
// Теперь вы можете обращаться к ценам по имени, например:
console.log(prices['someone2']); // Выводит цену для 'someone2'
});pricesпозволяет вам избежать создания большого количества отдельных переменных и упрощает доступ к данным по ключу, который может быть именем пользователя или любым другим уникальным идентификатором. Это делает код более читаемым и легко масштабируемым.
const mysql = require('mysql2/promise');
// Объект для хранения цен
const prices = {};
async function getDataAndUpdatePrices() {
const connection = await mysql.createConnection({
host: "127.0.0.1",
user: "root",
password: "",
database: "mania"
});
try {
// Получаем данные из таблицы price_history_1d
const [rows, fields] = await connection.execute('SELECT * FROM price_history_1d');
// Обновляем объект prices, используя имя как ключ и присваивая цену как значение
rows.forEach(row => {
prices[row.name] = parseFloat(row.price);
});
} catch (err) {
console.error(err);
} finally {
await connection.end();
}
}
// Вызываем функцию и выводим результат
getDataAndUpdatePrices().then(() => {
console.log(prices); // Выводим обновленные цены
// Теперь вы можете обращаться к ценам по имени, например:
console.log(prices['someone2']); // Выводит цену для 'someone2'
});
getDataAndUpdatePrices, которая подключается к базе данных MySQL, извлекает данные и обновляет объект prices. Каждый ключ в объекте prices соответствует имени пользователя, а значение - это его цена, преобразованная в число с плавающей точкой. После выполнения функции, вы можете использовать объект prices для доступа к ценам пользователей по их именам.
const mysql = require('mysql2/promise');
// Создание пула соединений
const pool = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: '',
database: 'mania',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
async function getDataFromDb() {
// Получение соединения из пула
const connection = await pool.getConnection();
try {
const [rows, fields] = await connection.query('SELECT * FROM price_history_1d');
// Обработка результатов запроса
// ...
} catch (err) {
console.error(err);
} finally {
// Возвращение соединения в пул
connection.release();
}
}
// Вызов функции для работы с данными
getDataFromDb();
const mysql = require('mysql2/promise');
// Создание пула соединений
const pool = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: '',
database: 'mania',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// Объект для хранения цен
const prices = {};
async function getDataAndUpdatePrices() {
// Получение соединения из пула
const connection = await pool.getConnection();
try {
// Получаем данные из таблицы price_history_1d
const [rows, fields] = await connection.query('SELECT * FROM price_history_1d');
// Обновляем объект prices, используя имя как ключ и присваивая цену как значение
rows.forEach(row => {
prices[row.name] = parseFloat(row.price);
});
} catch (err) {
console.error(err);
} finally {
// Возвращение соединения в пул
connection.release();
}
}
// Вызываем функцию и выводим результат
getDataAndUpdatePrices().then(() => {
console.log(prices); // Выводим обновленные цены
// Теперь вы можете обращаться к ценам по имени, например:
console.log(prices['someone2']); // Выводит цену для 'someone2'
});
// Добавление или обновление записи в таблице
async function addOrUpdateUser(newUser) {
try {
const connection = await pool.getConnection();
try {
const sql = 'INSERT INTO price_history_1d SET ? ON DUPLICATE KEY UPDATE ?';
const [rows, fields] = await connection.query(sql, [newUser, newUser]);
console.log(rows); // Вывод результата операции
} finally {
connection.release();
}
} catch (err) {
console.error('Ошибка: ' + err.message);
}
}
// Объект с данными для добавления или обновления
let newUser = {
birza: '571',
symbol: 'dd',
date_day: '22.07.2023',
price: '05.45678977'
};
// Вызов функции для добавления или обновления пользователя
addOrUpdateUser(newUser);
const mysql = require('mysql2/promise');
// Создание пула соединений
const pool = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: '',
database: 'mania',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// Объект для хранения цен
const prices = {};
// Функция для получения данных и обновления цен
async function getDataAndUpdatePrices() {
const connection = await pool.getConnection();
try {
const [rows, fields] = await connection.query('SELECT * FROM price_history_1d');
rows.forEach(row => {
prices[row.name] = parseFloat(row.price);
});
} catch (err) {
console.error(err);
} finally {
connection.release();
}
}
// Функция для добавления или обновления пользователя
async function addOrUpdateUser(newUser) {
const connection = await pool.getConnection();
try {
const sql = 'INSERT INTO price_history_1d (birza, symbol, date_day, price) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE price = VALUES(price)';
const [result] = await connection.execute(sql, [newUser.birza, newUser.symbol, newUser.date_day, newUser.price]);
console.log(result);
} catch (err) {
console.error('Ошибка: ' + err.message);
} finally {
connection.release();
}
}
// Вызов функций
getDataAndUpdatePrices().then(() => {
console.log(prices); // Выводим обновленные цены
console.log(prices['someone2']); // Выводит цену для 'someone2'
});
let newUser = {
birza: '571',
symbol: 'dd',
date_day: '22.07.2023',
price: '05.45678977'
};
addOrUpdateUser(newUser);
// Глобальная переменная для хранения данных
let globalData = [];
// Функция для получения данных
async function getData() {
// Здесь должен быть ваш код для получения данных
// Предположим, что мы получили следующий массив данных:
return [
{ id: 1, name: 'Alice', price: '10.00' },
{ id: 2, name: 'Bob', price: '20.00' }
];
}
// Вызываем функцию и сохраняем результат в глобальную переменную
getData().then(data => {
globalData = data;
console.log(globalData); // Выводим данные в консоль
});