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 mysql2
async/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); // Выводим обновленное значение someone2
price
из объекта 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); // Выводим данные в консоль
});