2011-10-22 4 views
0

J'ai 2 tables: fichiers et utilisateur.mysql conditionnelle requête

files 
---------------------------- 
|Fileid | name | type | 
---------------------------- 
| 01  | file1 | private | 
| 02  | file2 | private | 
| 03  | file3 | Public | 
---------------------------- 

et

user 
--------------------- 
| Fileid | UserId | 
--------------------- 
| 01  | user1 | 
| 02  | user1 | 
--------------------- 

Comment pourrais-je sélectionner tout le dossier (privé et public) pour qui toujours id est dans la table « utilisateur » et seuls les fichiers « publics » pour tout autre utilisateur où le 'userid' n'est pas dans la table 'user'? S'il vous plaît aider

+0

cette question est étrangement formatée et décrite de manière confuse. – MarianP

Répondre

2

Si je comprends bien le problème, vous êtes à la recherche d'un LEFT JOIN favorisant files retourner tous les champs pour UserId non nulle, ou seulement quand PublicUserId IS NULL.

SELECT 
    files.* 
FROM files LEFT JOIN user ON files.Fileid = user.Fileid 
WHERE 
    user.UserId IS NOT NULL 
    OR (user.UserId IS NULL AND files.type = 'Public') 
+0

Je pense que c'est la solution que je cherchais, laissez-moi essayer et voir.Merci @Michael –

+0

Cette requête ferait l'affaire, sauf que vous avez une faute de frappe dans votre parenthèse; user.User.Id doit être user.UserId – Marcus

+0

@Marcus Réservé comme vous le faisiez. –

0

D'après ce que je comprends, vous avez besoin de 2 boucles pour la première partie. une boucle obtiendra les identifiants d'utilisateur de la table. et la deuxième boucle devrait être placée à l'intérieur du premier. la seconde utilisera l'identifiant dans la boucle pour obtenir tous les fichiers.

La deuxième partie peut être faite en ayant une boucle avec une requête sql comme SELECT * FROM files WHERE userID != $userID[$i] et $ userID devrait être un tableau avec tous vos ID d'utilisateurs.

REMARQUE: j'ai supposé que vous avez oublié d'inclure une clé étrangère dans la table de fichiers pour connecter les deux tables ensemble.

+0

Ahoura Ghotbi, merci pour la réponse ... y at-il un moyen que je peux le faire dans la requête elle-même? –

+0

Oui, si je ne me trompe pas, vous pouvez utiliser la fonction d'union en SQL et obtenir tous les ID, puis les comparer avec votre autre table pour voir s'ils sont là. –