web-dev-qa-db-fra.com

MySQL select où égal à plusieurs valeurs

J'ai deux bases de données, où je stocke qui suit qui et une autre qui stocke les publications de l'utilisateur.

Je souhaite sélectionner toutes les personnes qu'un utilisateur suit dans la base de données suivante et rappeler les noms d'utilisateur de ceux que cet utilisateur suit et interroger la base de données des publications pour connaître les publications de cet utilisateur.

Mon problème est ce qui se passe si un utilisateur suit plusieurs utilisateurs, Je me suis fait l'écho de l'ID utilisateur des personnes que cet utilisateur suit et je reçois 44443344330

Quand je sépare chaque identifiant avec commans, j'obtiens:

44,44,33,44,33,0, 

alors donnons à cela une variable de $user_ids;

$user_ids = "44,44,33,44,33,0, ";

la requête:

$get_posts = mysql_query("SELECT * FROM posts WHERE userid = '$user_ids'");

mais tout ce qu'il fait est de montrer les enregistrements du premier identifiant d'utilisateur, 44.

Comment puis-je récupérer tous les enregistrements pour tous les utilisateurs?

19
frank

La requête devrait être:

SELECT * FROM posts WHERE userid IN (44,44,33,44,33,0)

Cependant, vous devrez peut-être repenser votre modèle de données et vous assurer qu'il est normalisé afin de pouvoir exprimer cette construction directement dans la base de données sans faire écho dans une chaîne séparée par des virgules.

Pourquoi avez-vous deux bases de données ? Voulez-vous dire deux tables ?

25
Kerrek SB

Peut-être que vous voulez utiliser IN

SELECT * FROM posts WHERE userid IN ($user_ids)
21
james_bond

En supposant que vous avez deux tabels , pas des bases de données, et que la table (appelons-la "amis") qui décrit qui suit qui ressemble à

table friends(
  userid
  friendid
)

puis requête pour obtenir les messages postés par les amis de X serait

SELECT
 p.* 
FROM posts p
  JOIN friends f ON(p.userid = f.friendid)
WHERE f.userid = X
1
ain
$get_posts = mysql_query("SELECT * FROM posts WHERE userid in '($user_ids)'");
0
Shaun Hare