2012-05-03 13 views
5

मैं इस चित्र है POST WITH FEEDSPHP MySQL कैसे संबंध तीन अलग-अलग टेबल से आउटपुट दिखा टेबल

क्या मैं चाहता हूँ कर इस उत्पादन है: Likes post - like Facebook

कैसे आप इस एक के क्वेरी करने के लिए प्रबंधन कर ?

मैं इस कोड

SELECT users.firstname, users.lastname, 
     users.screenname, posts.post_id, posts.user_id, 
     posts.post, posts.upload_name, 
     posts.post_type, posts.date_posted 
FROM website.users users 
INNER JOIN website.posts posts ON (users.user_id = posts.user_id) 
ORDER BY posts.pid DESC 
//PROBLEM with this one is that it only views the post from all users. 

//SO I added 
SELECT COUNT(user_id) AS friends, SUM(user_id = ?) AS you, user_id 
FROM feeds WHERE post_id = ? 
//This one will give you two fields containing how many different users **feeds** the 
post 

कृपया मदद लोग है। असल में यह मैं सिर्फ का अनुसरण कर रहा हूं फेसबुक की "पसंद" स्थिति एकमात्र चीज यह है कि मैं इस तरह की सामग्री के साथ शौकिया नहीं हूं इसलिए मुझे आपके सभी उत्तरों को सुनकर खुशी होगी। मैं वास्तव में आपकी मदद की जरूरत

उत्तर

3

अगर मैं तुम्हें सही ढंग से समझ लिया है, तो आप एक बाहरी आदेश एक साथ सभी मिलाने का में feeds तालिका के साथ शामिल होने के (आदेश सभी posts बनाए रखने के लिए भले ही कोई जुड़े रहे हैं feeds), तो GROUP BY post.pid चाहते प्रत्येक पोस्ट के लिए इस तरह की फीड, और SELECT वांछित जानकारी।

मैं MySQL के GROUP_CONCAT() फ़ंक्शन का उपयोग सभी उपयोगकर्ताओं (group_concat_max_len तक) जो किसी दिए गए पद के लिए "फ़ीड" है की एक अल्पविराम द्वारा पृथक सूची प्राप्त करने के लिए (आप SEPARATOR संशोधक के साथ सीमांकक को बदल सकते हैं, तो वांछित हैं) ।

SELECT users.firstname, users.lastname, 
     users.screenname, posts.post_id, posts.user_id, 
     posts.post, posts.upload_name, 
     posts.post_type, posts.date_posted, 
     COUNT(feeds.user_id) AS friends, -- number of "likes" 
     SUM(feeds.user_id = ?) AS you,  -- did I like this? 
     GROUP_CONCAT(feeds.user_id)  -- who likes it? 
FROM website.users users 
INNER JOIN website.posts posts ON (users.user_id = posts.user_id) 
LEFT JOIN website.feeds feeds ON (posts.post_id = feeds.post_id) 
GROUP BY posts.pid 
ORDER BY posts.pid DESC 

अद्यतन

उपयोगकर्ताओं को, जो "पसंद" है पोस्ट, अपने आप को छोड़कर का पूरा नाम प्राप्त करने के लिए एक users तालिका दूसरी बार में शामिल होने की जरूरत है:

SELECT users.firstname, users.lastname, 
     users.screenname, posts.post_id, posts.user_id, 
     posts.post, posts.upload_name, 
     posts.post_type, posts.date_posted, 
     COUNT(feeds.user_id) AS friends,      -- number of "likes" 
     SUM(feeds.user_id = ?) AS you,      -- did I like this? 
     GROUP_CONCAT(
     CASE WHEN NOT likes.user_id = ? THEN    -- exclude self 
      CONCAT_WS(' ', likes.firstname, likes.lastname) -- full names 
     END 
     ) 
FROM website.users users 
INNER JOIN website.posts posts ON (users.user_id = posts.user_id) 
LEFT JOIN website.feeds feeds ON (posts.post_id = feeds.post_id) 
LEFT JOIN website.users likes ON (feeds.user_id = likes.user_id) 
GROUP BY posts.pid 
ORDER BY posts.pid DESC 
+0

बहुत धन्यवाद दोस्त! लेकिन भाई, इस पंक्ति के बारे में "एसयूएम (user_id =?) जैसा कि, - क्या मुझे यह पसंद आया? GROUP_CONCAT (user_id)" क्या यह "feeds.user_id" होना चाहिए? मुझे यह कहते हुए एक त्रुटि हो रही है: "फ़ील्ड सूची में कॉलम user_id संदिग्ध है –

+0

हां, क्षमा करें: 'feeds.user_id'। अपडेट किया गया। – eggyal

+0

आपकी सभी मदद के लिए बहुत बहुत धन्यवाद! –

2

यदि आप इसे सभी उपयोगकर्ताओं के लिए करना चाहते हैं और साथ ही फ़ीड प्राप्त करते हैं, तो आप इस feed तालिका में शामिल होने ve:

SELECT u.firstname, u.lastname, 
    u.screenname, p.post_id, p.user_id, 
    p.post, p.upload_name, 
    p.post_type, p.date_posted, 
    COUNT(f.user_id) AS friends, SUM(f.user_id = ?) AS you 
FROM website.users u 
INNER JOIN website.posts p ON (u.user_id = p.user_id) 
LEFT JOIN website.feeds f ON (p.post_id = f.post_id) 
GROUP BY p.pid 
ORDER BY p.pid DESC 

यह एक चाल करना चाहिए ...

+0

धन्यवाद दोस्त! सबकुछ समझने की कोशिश कर रहे हैं –

+0

@ पीटरवेटर आपका स्वागत है। – shadyyx

संबंधित मुद्दे