2010-01-16 15 views
7

मैं मतदान के साथ एक ऑनलाइन गैलरी के विकास कर रहा हूँ और चित्रों और वोट के लिए एक अलग तालिका है (हर वोट के लिए मैं चित्र और की आईडी भंडारण कर रहा हूँ पर डुप्लिकेट में परिणाम मतदाता की आईडी)। इस तरह से संबंधित सारणी: PICTURE <--(1:n, using VOTE.picture_id)-- VOTE। मैं चित्र तालिका से पूछताछ करना चाहता हूं और आउटपुट को वोट नंबर से सॉर्ट करना चाहता हूं। यह मैं क्या कर रहा है:पेजिंग/ऑफसेट कभी कभी विभिन्न पृष्ठों

SELECT 
    picture.votes_number, 
    picture.creation_date, 
    picture.author_id, 
    picture.author_nickname, 
    picture.id, 
    picture.url, 
    picture.name, 
    picture.width, 
    picture.height, 
    coalesce(anon_1."totalVotes", 0) 
FROM picture 
LEFT OUTER JOIN 
    (SELECT 
     vote.picture_id as pid, 
     count(*) AS "totalVotes" 
    FROM vote 
    WHERE vote.device_id = <this is the query parameter> GROUP BY pid) AS anon_1 
ON picture.id = anon_1.pid 
ORDER BY picture.votes_number DESC 
LIMIT 10 
OFFSET 0 

OFFSET विभिन्न पृष्ठों के लिए अलग, निश्चित रूप से है।

हालांकि, अलग-अलग पृष्ठों पर प्रदर्शित होने वाली आईडी के साथ चित्र हैं। मुझे लगता है कि सॉर्टिंग का कारण है, लेकिन कोई बेहतर क्वेरी नहीं बना सकता है, जो डुप्लिकेट की अनुमति नहीं देगा। क्या कोई मुझे संकेत दे सकता है?

अग्रिम धन्यवाद!

उत्तर

12

के साथ कोई समस्या नहीं है क्या आप प्रति पृष्ठ एक प्रश्न प्रदर्शित करने के लिए निष्पादित करते हैं? यदि हां, तो मुझे संदेह है कि डेटाबेस समान संख्या वाले वोटों के लिए एक संगत आदेश की गारंटी नहीं देता है। तो पहली क्वेरी { item 1, item 2 } लौटा सकती है और दूसरी क्वेरी { item 2, item 1} लौटा सकती है यदि दोनों आइटमों में समान संख्या में वोट हैं। आइटम वास्तव में 10 आइटम और 11 हैं, तो एक ही आइटम पेज 1 पर प्रकट हो सकता है और फिर पेज 2.

पर मैं एक बार इस तरह के एक समस्या थी। अगर वह भी अपने बात है, द्वारा आदेश के लिए एक अतिरिक्त खंड संलग्न एक ही वोट संख्या, जैसे के साथ आइटम के अनुरूप आदेश सुनिश्चित करने के लिए:

ORDER BY picture.vote, picture.ID

+0

इससे मदद मिली है, धन्यवाद! –

2

साधारण व्याख्या यह है कि आप कुछ डेटा जोड़ा या कुछ वोट हुई है जब आप विभिन्न पृष्ठों देख रहा था था।

मुझे यकीन है कि अगर आप आईडी या सृजन_डेट द्वारा सॉर्ट करेंगे तो यह समस्या दूर हो जाएगी।

आईई। आपके कोड

+0

वास्तव में नहीं। मैंने एक टेस्ट स्क्रिप्ट बनाई जो परमाणु रूप से सभी पृष्ठों को लाता है और प्रदर्शित चित्रों की आईडी प्रिंट करता है, और डुप्लीकेट अभी भी –

0

मेरे मामले में इस समस्या में व्यर्थ मान की वजह से था खंड द्वारा आदेश, मैंने अन्य फ़ील्ड के साथ ऑर्डर बाय क्लॉज में एक और अद्वितीय आईडी फ़ील्ड जोड़कर इसे हल किया।

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