J'utilise this plugin MySQL pour Node.js. Voici une requête très simple:Requête MySQL via Node.js avec un nombre inconnu de paramètres null
db.query("SELECT * FROM user WHERE first = ? AND last = ?", [req.query.first, req.query.last], function(error, results) {
console.log(results);
});
Maintenant, voici le problème: si seulement certains des paramètres de requête sont définis, mais pas tous? Ceci est un cas d'utilisation très courante, donc je suppose que il y a une façon élégante de rendre compte de cela, mais cela est tout ce que je peux sembler venir avec:
var query;
if (first && !last) {
query = "SELECT * FROM user WHERE first = ?";
} else if (!first && last) {
query = "SELECT * FROM user WHERE last = ?";
} else if (first && last) {
query = "SELECT * FROM user WHERE first = ? AND last = ?";
}
db.query(query, [req.query.first, req.query.last], function(error, results) {
console.log(results);
});
Rédaction d'une requête distincte pour toutes les combinaisons possibles est évidemment une façon grossière de le faire, et n'est vraiment pas très pratique s'il y a plus que quelques paramètres de requête. Existe-t-il un moyen plus élégant (c'est-à-dire concis) de comptabiliser un nombre inconnu de paramètres nuls?
MISE À JOUR
C'est ce qui a fini par travailler pour moi:
db.query("SELECT * FROM user WHERE (:first IS NULL || first = :first) AND (:last IS NULL || last = :last)", {first: req.query.first, last: req.query.last}, function(error, results) {
console.log(error);
});
C'est exactement ce que je cherchais. Merci! –