2014-05-18 2 views
0

J'ai deux tables. Je veux les joindre ensemble où users_logs.music_id=users_likes.music_id et users_logs.user_id=users_likes.user_idRécupère les lignes et marque-les sur une autre table

Cette table nommée users_logs et a des lignes répétitives.

+----+----------+---------+ 
| id | music_id | user_id | 
+----+----------+---------+ 
| id | 1  | 1  | 
+----+----------+---------+ 
| id | 2  | 1  | 
+----+----------+---------+ 
| id | 1  | 1  | 
+----+----------+---------+ 
| id | 3  | 2  | 
+----+----------+---------+ 
| id | 3  | 1  | 
+----+----------+---------+ 

Cette table nommée users_likes.

+----+----------+---------+ 
| id | music_id | user_id | 
+----+----------+---------+ 
| id | 1  | 1  | 
+----+----------+---------+ 
| id | 2  | 2  | 
+----+----------+---------+ 
| id | 5  | 1  | 
+----+----------+---------+ 

Après obtenir l'ordre décroissant dernier 3 lignes de user_logs pour user_id=1 Je veux ci-dessous sortie:

1. music_id = 3 like = 0 
2. music_id = 1 like = 1 
3. music_id = 2 like = 0 

Comment puis-je faire avec seulement 1 requête dans MySQL?

+0

Vous avez copié la même table pour user_likes - s'il vous plaît le modifier et dites-nous ce que vos champs sont – DreamWave

+0

Structure de deux tables sont les mêmes mais les données sont différentes – Hossein

Répondre

1

Si je suis la logique correctement, cette requête devrait faire ce que vous voulez. Il suppose que la colonne id spécifie l'ordre pour obtenir les trois dernières lignes de user_logs:

select ul.music_id, (uli.user_id is not null) as `like` 
from (select ul.* 
     from user_logs ul 
     where user_id = 1 
     order by id desc 
     limit 3 
    ) ul left outer join 
    users_likes uli 
    on ul.user_id = uli.user_id and ul.music_id = uli.music_id; 
Questions connexes