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
});
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();
c
из поиска в FTS5, вы можете использовать оператор NOT
в сочетании с запросом MATCH
. Однако, важно правильно сформировать запрос, чтобы он корректно интерпретировался. Вот пример запроса, который исключает столбец c
из поиска:SELECT a, b, c FROM data WHERE data MATCH 'a:Что*Тузик* OR b:Что*Тузик*' AND NOT data MATCH 'c:Что*Тузик*';
MATCH
для столбцов a
и b
с вашим поисковым запросом, и затем исключаем результаты, где столбец c
также соответствует этому запросу. Обратите внимание, что NOT
применяется к всему выражению MATCH
, а не к отдельным словам внутри него. getDataAndUpdatePrices
, которая подключается к базе данных MySQL, извлекает данные и обновляет объект prices
. Каждый ключ в объекте prices
соответствует имени пользователя, а значение - это его цена, преобразованная в число с плавающей точкой. После выполнения функции, вы можете использовать объект 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'
});
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
позволяет вам избежать создания большого количества отдельных переменных и упрощает доступ к данным по ключу, который может быть именем пользователя или любым другим уникальным идентификатором. Это делает код более читаемым и легко масштабируемым. 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
. Это значение вы можете использовать в дальнейшем коде. getData
асинхронно получает данные из базы данных и ищет пользователя с именем someone2
. Если такой пользователь найден, его price
присваивается переменной XX
. После выполнения функции getData
, данные доступны в переменной data
, и вы можете использовать их по своему усмотрению. Обратите внимание, что XX
обновляется внутри функции 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
});
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
, и вы можете работать с ними так, как вам нужно. Это более предпочтительный способ работы с асинхронными данными, так как он не зависит от глобального состояния.