2013-01-19 24 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 

這會給你一個指定用戶喜歡的帖子總數。