Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zbudować dynamiczne zapytanie przez powiązanie parametrów w node.js-sql?

Masz naprawdę dobry początek, ale być może trochę nad tym przemyślałeś. Sztuczka polega na zbudowaniu zapytania z symbolami zastępczymi (? ) jako ciąg i jednocześnie zbuduj tablicę wartości.

Tak więc, jeśli masz params = { name: 'foo', age: 40 } , chcesz zbudować następujące obiekty:

where = 'name LIKE ? AND age = ?';
values = [ '%foo%', 40 ];

Jeśli masz tylko { name: 'foo' } , zamiast tego zbudujesz te:

where = 'name LIKE ?';
values = [ '%foo%' ];

Tak czy inaczej, możesz użyć tych obiektów bezpośrednio w query metoda, tj.:

var sql = 'SELECT * FROM table WHERE ' + where;
connection.query(sql, values, function...);

Jak więc budujemy te obiekty? W rzeczywistości kod jest bardzo podobny do twojego buildQuery funkcja, ale mniej złożona.

function buildConditions(params) {
  var conditions = [];
  var values = [];
  var conditionsStr;

  if (typeof params.name !== 'undefined') {
    conditions.push("name LIKE ?");
    values.push("%" + params.name + "%");
  }

  if (typeof params.age !== 'undefined') {
    conditions.push("age = ?");
    values.push(parseInt(params.age));
  }

  return {
    where: conditions.length ?
             conditions.join(' AND ') : '1',
    values: values
  };
}

var conditions = buildConditions(params);
var sql = 'SELECT * FROM table WHERE ' + conditions.where;

connection.query(sql, conditions.values, function(err, results) {
  // do things
});



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć fałszywe kolumny zmiennych dla tysięcy kategorii w Google BigQuery?

  2. MySQL aktualizuje pole za pomocą zmiennej inkrementacyjnej

  3. Napraw „BŁĄD 1136 (21S01):Liczba kolumn nie odpowiada liczbie wartości w wierszu 1” podczas wstawiania danych do MySQL

  4. Jak utworzyć nowego użytkownika i przyznać uprawnienia w MySQL

  5. Czy istnieje sposób na uruchomienie MySQL w pamięci dla przypadków testowych JUnit?