Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2017, 12:37
Аватар для Sebastian Pereiro
Новичок на форуме
Отправить личное сообщение для Sebastian Pereiro Посмотреть профиль Найти все сообщения от Sebastian Pereiro
 
Регистрация: 19.11.2017
Сообщений: 6

Получение конкретного значения из mySQL
Добрый день. Прошу сильно не пинать...

Имеется следующий код:

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : '127.0.0.1',
    user     : 'root',
    password : 'password',
    database : 'maindb'
});

connection.connect();
console.log('connection complete');


connection.query('SELECT * FROM users', function(error, results){
    if (error) throw error;
    console.log(results);
});

//console.log(query);
connection.end();


Результатом выполнения данной команды является:

Код:
connection complete
[ RowDataPacket { id: 1, name: 'Anton', lastname: 'Hosse', role: 'admin' },
  RowDataPacket { id: 2, name: 'Alex', lastname: 'Cooper', role: 'user' } ]
Главной задачей является вывод значений только столбца "name".

Если выполнить вывод
console.log(results.name);
,
то в консоль возвращается:
Код:
connection complete
undefined
.

В чем подвох и где можно почитать на эту тему?

PS. Я новичок, постигаю все эти вещи в свободное от работы время.
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2017, 13:11
Аватар для Sebastian Pereiro
Новичок на форуме
Отправить личное сообщение для Sebastian Pereiro Посмотреть профиль Найти все сообщения от Sebastian Pereiro
 
Регистрация: 19.11.2017
Сообщений: 6

Так, как я понял, RowDataPacket является объектом...
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2017, 13:15
Аватар для Sebastian Pereiro
Новичок на форуме
Отправить личное сообщение для Sebastian Pereiro Посмотреть профиль Найти все сообщения от Sebastian Pereiro
 
Регистрация: 19.11.2017
Сообщений: 6

Неактуально,
console.log(results[0].name);


Оказывается, я был близок))
Ответить с цитированием
  #4 (permalink)  
Старый 19.11.2017, 20:13
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

угу, а сделать запрос SELECT name FROM users;
Если надо только name?
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2017, 08:36
Аватар для Sebastian Pereiro
Новичок на форуме
Отправить личное сообщение для Sebastian Pereiro Посмотреть профиль Найти все сообщения от Sebastian Pereiro
 
Регистрация: 19.11.2017
Сообщений: 6

Сообщение от Lion777 Посмотреть сообщение
угу, а сделать запрос SELECT name FROM users;
Если надо только name?
Ну он же все равно вернёт объект, а не конкретное значение. Нужно присвоить значение переменной.
Ответить с цитированием
  #6 (permalink)  
Старый 21.11.2017, 13:08
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

угу, но какой объект, засоряется и память и замедляется работа бд, конечно в данном случае это не критично, но если глобально, то это если надо килограмм яблок, ты берешь и капусту и огурцы и еще всякой фигни, а надо было только яблоки ), не верно просить из базы все, а потом фильтровать, базой это все надо делать.
Ответить с цитированием
  #7 (permalink)  
Старый 21.11.2017, 20:25
Аватар для Sebastian Pereiro
Новичок на форуме
Отправить личное сообщение для Sebastian Pereiro Посмотреть профиль Найти все сообщения от Sebastian Pereiro
 
Регистрация: 19.11.2017
Сообщений: 6

Lion777, спасибо, я это понимаю

Решил более не засорять тему и пару дней промучался сам. Как сделать видимым результат запроса за пределами функции?

Имеем следующий код:

var mysql      = require('mysql');
   var connection = mysql.createConnection({
       host     : '127.0.0.1',
       user     : 'root',
       password : 'ПАРОЛЬ',
       database : 'maindb'
   });
   
   connection.connect();
  console.log('Connection complete!');
  
  var querySelectUser = 'SELECT * FROM users';
  res = 'Пока пусто';
  var query = connection.query(querySelectUser, function foo(error, results){
      if (error) throw error;
      //console.log(results[0].name);
      res = results[0].name;
      console.log(res + ' - Это из функции');
      return res;
  });
  
  console.log(query.res + ' - Это должно быть ');
  connection.end();


Каким образом лучше организовать 22 строку? Возвращает undefined, хоть ты тресни...
Ответить с цитированием
  #8 (permalink)  
Старый 22.11.2017, 00:18
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Вот и ещё один человек открыл для себя асинхронность. Годы текут, ничего не меняется...

Sebastian Pereiro, "foo" - это функция-коллбэк, она будет вызвана только когда получит результат от базы, т.е. хрензнает когда, может быть спустя годы, если коннект к базе по радиоканалу с луны.
К тому времени 22 строка уже давно выполнится своим чередом.
Еслиб скрипт ждал результата, то он всё это время бы висел и ни на что не реагировал, а это какбэ противоречит самой сути современного js - асинхронности всего и вся.
Для начала дели свой код на функции и вызывай оные последовательно.

P.S. В самом современном js для таких случаев ныне применяют promise и async\await, но без понимания базы это всё равно бесполезно, т.к. лишь удобная надстройка над всё той же сутью.
__________________
29375, 35

Последний раз редактировалось Aetae, 22.11.2017 в 00:26.
Ответить с цитированием
  #9 (permalink)  
Старый 23.11.2017, 06:34
Аватар для Sebastian Pereiro
Новичок на форуме
Отправить личное сообщение для Sebastian Pereiro Посмотреть профиль Найти все сообщения от Sebastian Pereiro
 
Регистрация: 19.11.2017
Сообщений: 6

Сообщение от Aetae Посмотреть сообщение
Вот и ещё один человек открыл для себя асинхронность. Годы текут, ничего не меняется...

Sebastian Pereiro, "foo" - это функция-коллбэк, она будет вызвана только когда получит результат от базы, т.е. хрензнает когда, может быть спустя годы, если коннект к базе по радиоканалу с луны.
К тому времени 22 строка уже давно выполнится своим чередом.
Еслиб скрипт ждал результата, то он всё это время бы висел и ни на что не реагировал, а это какбэ противоречит самой сути современного js - асинхронности всего и вся.
Для начала дели свой код на функции и вызывай оные последовательно.

P.S. В самом современном js для таких случаев ныне применяют promise и async\await, но без понимания базы это всё равно бесполезно, т.к. лишь удобная надстройка над всё той же сутью.
можно немного конкретики? есть какой-то минимальный шаг, для выполнения условия? прочитал про промисы, асинки, но в мой пример ясности особо не внесло.
Ответить с цитированием
  #10 (permalink)  
Старый 23.11.2017, 10:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Пример? Вот пример:
var mysql  = require('mysql');
function makeRequest(){
   var connection = mysql.createConnection({
       host     : '127.0.0.1',
       user     : 'root',
       password : 'ПАРОЛЬ',
       database : 'maindb'
   });
  connection.connect();
  console.log('Connection complete!');
  
  var querySelectUser = 'SELECT * FROM users';
  var query = connection.query(querySelectUser, function foo(error, results){
      if (error) throw error;
      //console.log(results[0].name);
      var res = results[0].name;
      console.log(res + ' - Это из функции');
	  
      workWithResult(res);
      connection.end();
  });
}

function workWithResult(result){
  console.log(result + ' - Это должно быть ');
}

Если вопрос "как писать код тупо подряд?", ответ - никак. Потому что сами запросы выполняются не подряд, асинхронно.

Асинки могут сделать чтоб выглядело примерно подряд, но всё равно потребуются функции-обёртки и промисы. И как я сказал выше, без понимания базы js их трогать вам не надо, зря читали, лучше бы начальный учебник по слову асинхронность открыли.
__________________
29375, 35

Последний раз редактировалось Aetae, 23.11.2017 в 10:15.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение значения Kloniy jQuery 7 21.10.2014 04:32
значения td из конкретного tr AnkaIiIn Общие вопросы Javascript 3 12.11.2012 01:06
получение значения поля eidicon jQuery 4 02.07.2012 19:06
получение значения css-свойств demoniqus Общие вопросы Javascript 0 12.02.2012 12:27
получение значения из классов karmis Events/DOM/Window 1 14.10.2011 19:09