2013-01-19 27 views
0

我所要求的查询语句我有两个表 第一表“的帖子”:MySQL查询检查,如果用户喜欢

post_id  title Userid 
1   test  1 

其他表是“喜欢”

userid post_id 
1  1 

我需要单个查询来检查用户是否喜欢这张照片或者没有批量选择我的解决方案非常差:

SELECT * FROM `table` WHERE x = x LIMIT 100; 

和gi终于看完的foreach,使查询的每一行:

foreach($results as $v) 
{ 
    $data[1] = $v; 
    $data[1]['is_like'] = SELECT COUNT(*) FROM likes WHERE userid = 1; 
} 

1是已登录用户ID

我需要一个查询返回POST_ID ..等,并提交像is_like

+1

请编辑您的问题,一些样本数据添加到'likes'表,然后添加你想要的结果从样本数据中结合'posts'中的数据。如果没有它,很难说出你的要求。谢谢。 –

+0

我已添加,现在可以查询 – user1920678

回答

1
SELECT 
    p.post_id, 
    p.title, 
    IF(l.post_id IS NOT NULL,1,0) as like 
FROM posts as p 
LEFT JOIN likes as l ON l.post_id = p.post_id AND l.userid = p.userid 
WHERE p.Userid = 1 

如果喜欢表POST_ID可用,就返回1,否则为0

1

假设likes只能有1行具有相同的(USER_ID,POST_ID):

SELECT p.* , 
CASE WHEN 
l.id IS NULL THEN 0 
ELSE 1 
END as is_liked 
FROM posts p 
LEFT JOIN likes l ON l.user_id = p.user_id and l.post_id =p.post_id 

如果不是(多行中likes对于给定的(USER_ID,POST_ID)):

SELECT p.* , 
CASE WHEN 
l.user_id IS NULL THEN 0 
ELSE 1 
END as is_liked 
FROM posts p 
LEFT JOIN 
(
    SELECT DISTINCT user_id,post_id FROM likes 
) l ON l.user_id = p.user_id and l.post_id =p.post_id; 

或者

SELECT p.* , 
CASE 
WHEN EXISTS (SELECT NULL FROM likes l 
    WHERE l.user_id = p.user_id and l.post_id =p.post_id) THEN 1 
ELSE 0 
END as is_liked 
FROM posts p 

更新 我希望有一个更好的了解这个问题的吧。我的假设:posts.user_id是创建帖子的用户的ID; like表存储关于谁喜欢该帖子的信息。因此,要检查所有的职位,以及是否特定像他们一样,你需要($login_user_id应正确转义)

SELECT p.* , 
CASE 
WHEN EXISTS (SELECT NULL FROM likes l 
    WHERE l.user_id = $login_user_id and l.post_id =p.post_id) THEN 1 
ELSE 0 
END as is_liked 
FROM posts p 
+0

嗨,首先感谢您的回答 我需要检查它是否已经登录用户我有变量,如 $ login_user_id = 1; 我需要检查这个用户喜欢发布或不是每个帖子在looop – user1920678

+0

我希望你不明白我的问题我的问题是: 我有($ login_user_id)这个用户已经登录现在我需要检查每个帖子这个用户是否喜欢它, – user1920678

+0

@ user1920678:检查更新的版本。希望我明白你想要达到的目标...... – a1ex07

0

像这样的东西应该作为一个单一的查询工作(未经测试,当然 - 你没有提供多少数据用于测试):

select 
    p.title, count(l.post_id) 
from 
    `posts` p 
inner join 
    `likes` l 
on 
    l.userid = p.userid and l.post_id = p.post_id 
where 
    p.userid = loggedinuserID 
group by 
    p.userid 

这会给你一个指定用户喜欢的帖子总数。