J'ai ces tables simples:MySQL: requête booléenne renvoyant true si l'utilisateur n'a pas le DND ou si l'utilisateur a mis en ID DND donné doit être un ami
1. USER_DND
╔════════╦══════╗
║ UserID ║ DnD ║
╠════════╬══════╣
╚════════╩══════╝
2. USER_FRIEND
╔════════╦══════════╗
║ UserID ║ FriendID ║
╠════════╬══════════╣
╚════════╩══════════╝
USER_DND
: Il contient les ID des utilisateurs et leur Ne pas déranger (Dnd). UserID
est un nombre entier et est la clé primaire. DnD
est un booléen.
USER_FRIEND
: Il contient les ID des amis des utilisateurs. UserID
et FriendID
sont tous les deux des entiers.
Problème:
Pour donné UserID
et FriendID
Je veux écrire un qui retourne vrai dans l'un des cas booléen retour simple de requête (SELECT CASE WHEN EXISTS
):
Si UserID donné a DnD
définir false dans USER_DND
OU
Si UserID donné a DnD
ensemble vrai dans USER_DND
et donné friendID existe dans USER_FRIEND
pour que UserID
supplémentaires:
Ces deux tables sont avec un grand nombre de lignes. La requête doit être très rapide. Donc, je ne préfère pas utiliser OR
in where clause of query ou query having subqueries. Les deux ont des pénalités de performance sévères.
Je ne comprends pas la logique de la deuxième condition, cela n'a pas beaucoup de sens. 'FriendID' existe seulement dans' USER_FRIEND', alors comment ça ne peut pas? – sagi
À quoi ressemble votre 'SHOW CREATE TABLE'? La clé de la performance est les index. – tadman
@sagi: Question mise à jour pour le rendre plus clair. S'il vous plait verifiez maintenant. Merci. – Atul