0
votes

MySQL: quels champs correspondaient à l'aide de "ou"

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) {...}
    }


0 commentaires

4 Réponses :


-1
votes

quel que soit le champ correspond à la première correspondance alors votre état devient vrai et il retournera le résultat . Si vous souhaitez correspondre à toute la condition, vous devez utiliser et OPERICE


1 commentaires

Ce n'est pas la question. Il veut savoir quelle condition a provoqué la correspondance de la ligne.



2
votes

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;
  });
})


2 commentaires

J'y ai pensé, mais ce n'est pas différent d'utiliser si () (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]


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.



0
votes

Essayez ci-dessous: -

SELECT * FROM accounts WHERE (username = "aaa" OR email = "abc@example.com" OR mobile = "123456789")


0 commentaires

0
votes

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.


0 commentaires