J'ai cette requête:
var username = req.body.username;
var email = req.body.email;
var mobile = req.body.mobile;
database.query("SELECT * FROM accounts WHERE username = ? OR email = ? OR mobile = ?",[username, email, mobile, (err, result)=>{
if (result.username == username) {...}
if (result.email == email) {...}
if (result.mobile == mobile) {...}
}
4 Réponses :
quel que soit le champ
Ce n'est pas la question. Il veut savoir quelle condition a provoqué la correspondance de la ligne.
Vous pouvez le mettre dans la liste code> SELECT CODE>. Vous pouvez utiliser concat_ws () code> pour combiner la liste des colonnes dans une liste séparée par des virgules. Il omettra des valeurs code> null code>, il suffit donc à lister les champs correspondants. database.query(`SELECT *,
CONCAT_WS(',',
IF(username = ?, 'username', NULL),
IF(email = ?, 'email', NULL),
IF(mobile = ?, 'mobile', NULL)) AS matched_fields
FROM accounts WHERE username = ? OR email = ? OR mobile = ?`, [username, email, mobile, username, email, mobile], (err, result) => {
var matched = result.matched_fields.split(',');
matched.each(field => {
switch(field) {
case 'username': ...; break;
case 'email': ...; break;
case 'mobile': ...; break;
});
})
J'y ai pensé, mais ce n'est pas différent d'utiliser si () code> (dans mon code). Donc, pour l'imposer, est-il possible de mettre tout le "comme" dans un tableau à retourner comme une matrice afin que je puisse simplement itérer cela? quelque chose comme comme correspondant [Nom de terrain] code>
Je l'ai mis à jour pour montrer comment les obtenir dans une seule colonne. SQL n'a pas de tableaux, vous devez donc utiliser des chaînes séparées par des virgules.
Essayez ci-dessous: -
SELECT * FROM accounts WHERE (username = "aaa" OR email = "abc@example.com" OR mobile = "123456789")
Créer une colonne personnalisée dans Sélectionnez la requête et que la colonne personnalisée dispose d'une instruction Case avec trois colonnes (nom d'utilisateur, courrier électronique, mobile) correspondant et imprimez le drapeau respectif dans cette colonne personnalisée pour le faire savoir que la ligne provient de la condition. p>