2010-04-07 6 views
10

छोड़ें मैं डेटाबेस से किसी वेबसाइट पर जानकारी प्रदर्शित करने के लिए एएसपी.Net प्रोजेक्ट पर काम कर रहा हूं। मैं एक समाचार तालिका से शीर्ष 10 आइटम चुनना चाहता हूं लेकिन पहले आइटम को छोड़ना चाहता हूं और मुझे इसके साथ कुछ समस्या है।एएसपी.नेट एसक्यूएल सर्वर शीर्ष एन मानों का चयन करें लेकिन एम परिणाम

<asp:SqlDataSource ID="SqlDataSource1" 
        runat="server" ProviderName="System.Data.SqlClient" 
        ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>" 
        SelectCommand="SELECT top 5 [id], 
               [itemdate], 
               [title], 
               [description], 
               [photo] 
            FROM [Announcements] order by itemdate desc"> 
</asp:SqlDataSource> 

यह वही है मैं अब तक है, लेकिन मैं किसी भी जानकारी ऑनलाइन कैसे एक रिकार्ड

+0

रिकॉर्ड छोड़कर आपका क्या मतलब है? क्या आप बस शीर्ष 10 रिकॉर्ड्स के नीचे 9 को वापस करना चाहते हैं, और एसक्यूएल क्वेरी में यह सब संभाल लें? – spong

उत्तर

8

आप एक फिल्टर का उपयोग या SQL में यह कर सकता है:

SELECT top 10 
     [id], 
     [itemdate], 
     [title], 
     [description], 
     [photo] 
    FROM [Announcements] 
    WHERE id <> (select TOP 1 id from announcements order by itemdate desc) 
    order by itemdate desc  

संपादित करें: मैं "लिया पहला आइटम को छोड़ "सचमुच। शायद यह तुम्हारा मतलब नहीं है?

+0

हाँ यह सही है, ठीक वही है जो मैं ढूंढ रहा हूं। धन्यवाद –

+0

यह क्वेरी आपके डेटा सेट को हजारों में होने पर विनाशकारी प्रदर्शन परिणाम प्रदान करेगी। 100 रिकॉर्ड के लिए यह एक बदसूरत समाधान होगा लेकिन यह काम करेगा। जब भी आप किसी खंड में कुछ डालते हैं तो इसे रिकॉर्ड के रूप में कई बार निष्पादित किया जाएगा। इस मामले में आप तालिका पर प्रत्येक रिकॉर्ड के लिए निष्पादित करेंगे (itemdate desc द्वारा घोषणा आदेश से शीर्ष 1 आईडी का चयन करें)। उल्लेख नहीं है कि इस उप-चयन में पूरी तालिका पर एक आदेश है जो महंगा है। – DidierDotNet

+0

@DidierDotNet आप प्रदर्शन में सुधार कैसे करेंगे, और आप इस कोड को और अधिक सुरुचिपूर्ण (बदसूरत नहीं) कैसे बनाएंगे? नोट मैं विभिन्न चीजों के लिए बदसूरत और प्रदर्शन पर विचार करता हूं। कभी-कभी आपके पास सुरुचिपूर्ण कोड होता है जो खराब या बदसूरत कोड करता है जो अच्छी तरह से प्रदर्शन करता है। यह सुनकर दिलचस्पी होगी कि आप इस कोड को और अधिक सुरुचिपूर्ण, बेहतर प्रदर्शन करने और ओपी की आवश्यकताओं को पूरा करने के लिए कैसे करेंगे। – AaronLS

9

छोड़ एसक्यूएल सर्वर 2005+, उपयोग के लिए के बारे में नहीं मिल सकता है है:

SELECT x.* 
    FROM (SELECT t.id, 
       t.itemdate, 
       t.title, 
       t.description, 
       t.photo, 
       ROW_NUMBER() OVER (ORDER BY t.itemdate) AS rank 
      FROM ANNOUNCEMENTS t) x 
WHERE x.rank BETWEEN a AND b 

लेकिन वहाँ अंकन को लागू करने के बेहतर साधन हैं, यदि वास्तव में यह है कि आप वास्तव में क्या कर रहे हैं।

0
DECLARE @topid int 
select @topid = max(id) from announcements group by itemdate, id 

SELECT top 10 [id], [itemdate], [title], [description], [photo]  
FROM [Announcements] A 
WHERE A.id <> @topid 
order by itemdate desc 
संबंधित मुद्दे