برگزیده های پرشین تولز

انتخاب تعدادی رکورد به طور تصادفی

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
سلام دوستان
میخوام تعدادی رکورد رو از جدولی درون بانک اطلاعاتی برنامم به طور تصادفی انتخاب کنم
مثلا از بین 500 رکورد فقط 40 تارو به طور تصادفی select کنم
ممنون میشم...
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
به آخر دستور select عبارت order by NEWID() رو اضافه کن
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
46
کد:
SELECT * FROM table ORDER BY RAND() LIMIT 1,40
 

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
دوست عزیز اون قسمت Limit چیکار میکنه؟ برام 1کم توضیح بده کد رو لطفـــا!i!
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
46
دوست عزیز اون قسمت Limit چیکار میکنه؟ برام 1کم توضیح بده کد رو لطفـــا!i!
()order by rand رکوردها رو به طور تصادفی مرتب میکنه. limit هم فقط 40 تای اول از اونها رو انتخاب میکنه. نتیجه میشه 40 تا رکورد تصادفی از بین کل رکوردها.
 

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
پس اون 1 چیه؟ نوشته LIMIT 1,40
???
 

shervin

ASP.net
کاربر قدیمی پرشین تولز
تاریخ عضویت
26 ژوئن 2005
نوشته‌ها
6,353
لایک‌ها
261
سن
38
محل سکونت
تهران
اگه دیتا بیست sql server هست از این دستور باید استفاده کنی
کد:
SELECT top 40 * FROM TBL ORDER BY newid()
 

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
خیر دوستان، دیتا بیس من access هست و از این دستور استفاده میکنم ولی جواب نمیده، یعنی در حال عادی اگه 1 2 3 4 رو از دیتابیس بخونه، وقتی از این کد استفاده میکنم 4 3 2 1 نشون میده یعنی از آخر


Cls.Sql = "select * from user where city='" + Trim(namecity) + "' and reg='yes' order by RND()"

منتظرم...
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
کد ASP برای گرفتن رکوردهای تصادفی از Access
کد:
<%
Randomize()

intRandomNumber = Int(1000*Rnd)+1

strSQL = _
    "SELECT TOP 3 TableID, Field1, Rnd(" & -1 * (intRandomNumber) &
"*TableID) " & _
    "FROM table1 " & _
    "ORDER BY 3"
%>
 

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
دوست عزیز لطفا بعضی قسمتاش رو یه کم توضیح بده...
مخصوصا رشته ای که توو strSQL ذخیره میشه....
همچنین قسمت آخر رشته یعنی Order By 3...
اون 3 یعنی چی؟
 

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
چی شد بالاخره؟
دوستی ، آشنائی، غریبه ای نمیخواد کمک کنه منو؟
منتظرماااااااااااااااااااااا..
 

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
واقعا که...
کسی نیست جواب این سوالمو بده...
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
46
والله من که هر چی نگاه میکنم جوابهایی که بهت دادند کامل و کافی هست.
 

tabeez

Registered User
تاریخ عضویت
7 دسامبر 2006
نوشته‌ها
260
لایک‌ها
0
نه کدوم کامل و کافی هست؟
یکی که کدش چند سطر هست رو هم سر در نیاوردم یعنی گذاشتم ولی هیچی انتخاب نمیکرد...
شما خواهشن برام بازنویسیش کن...
ممنون میشم...
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
40
محل سکونت
نصف جهان
در اکسس تابع RND این کار را انجام میدهد . شما باید از ORDER BY RND() استفاده کنید

اما به دلیل اینکه شما عمل Randomize را انجام نداده اید ، همواره نتایج یکسانی میگیرید

کد از خود MSDN :


کد:
Sub BuildRandomTable(lngRequest as Long)

   Dim dbsRandom As Database
   Dim rstOrders As Recordset
   Dim rstRandom As Recordset
   Dim UpperLimit As Long
   Dim LowerLimit As Long
   Dim lngCounter As Long
   Dim lngGuess As Long
   Dim lngRecordCount As Long

   ' Assumes that this module is in the Northwind database.
   Set dbsRandom = CurrentDb
   ' Delete any existing records from tblRandom table.
   dbsRandom.Execute "Delete * from tblRandom;"
   ' Open Orders as a Table Type recordset.
   Set rstOrders = dbsRandom.OpenRecordset("Orders", dbOpenTable)
   rstOrders.MoveFirst
   LowerLimit = rstOrders!OrderID
   rstOrders.MoveLast
   UpperLimit = rstOrders!OrderID
   lngRecordCount = rstOrders.RecordCount

   Set rstRandom = dbsRandom.OpenRecordset("tblRandom", _
                       dbOpenDynaset)
   lngCounter = 1

   ' Check to make sure the number of
   ' records requested is reasonable.
   If lngRequest > lngRecordCount Then
      MsgBox "Request is greater than the total number of records."
      Exit Sub
   Else
      lngRequest = lngRequest + 1
   End If


   [B][COLOR="Blue"]Randomize[/COLOR][/B]


   Do Until lngCounter = lngRequest
      ' Generate a random number
      lngGuess = Int((UpperLimit - LowerLimit + 1) * Rnd + LowerLimit)
      ' Ensure that it exists in the Orders table.
      rstOrders.Index = "PrimaryKey"
      rstOrders.Seek "=", lngGuess
      If rstOrders.NoMatch Then
         ' Drop through and generate a new number.
      Else
         ' Check to see if it's already been used in the new table.
         rstRandom.FindFirst "lngOrderNumber =" & lngGuess
         ' If not, add it to the new table.
         If rstRandom.NoMatch Then
            With rstRandom
               .AddNew
               !lngGuessNumber = lngCounter
               !lngOrderNumber = lngGuess
               .Update
            End With
               lngCounter = lngCounter + 1
         End If
      End If
   Loop
   ' Clean up.
   dbsRandom.Close

 End Sub




این کد را ببینید :

کد:
<%@ Language="VBScript" %>
<% Option Explicit %>
<html>
<head>
<title>Selecting a random record</title>
</head>
<body>
<%
'declare your variables
dim connection, recordset, sConnString, sql
dim intRandomNumber, intTotalRecords, i

'declare SQL statement that will query your database
sql = "SELECT * FROM tblFriends"

'create ADO connection and recordset object
Set connection = Server.CreateObject("ADODB.Connection")
Set recordset = Server.CreateObject("ADODB.Recordset")

'define the connection string, specify database
'driver and the location of database
sConnString="PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("Friends.mdb")

'Open the connection to the database
connection.Open(sConnString)

'Open the recordset object executing the SQL
recordset.Open sql, connection, 3, 1
'count the number of records and hold this is the variable intTotalRecords
intTotalRecords = recordset.RecordCount

[COLOR="Blue"][B]Randomize()[/B][/COLOR]

intRandomNumber = Int(intTotalRecords * Rnd)
'move to the random number returned
recordset.Move intRandomNumber
'open the table
Response.write("<table border='1'><tr>")
'loop through the total number of fields
For i = 0 to recordset.Fields.Count - 1
'write out the field value
Response.write("<td>" & recordset(i) & "</td>")
Next
'close the table
response.write("</tr></table>")

'close the recordset and connection objects and free up resources
recordset.Close
Set recordset=Nothing
connection.close
Set connection=Nothing
%>
</body>
</html>

این هم یک کد دیگ در مورد Randomizeر :

کد:
<%
    str = ","
    str1 = ","
	
    Do Until cnt1 = 0
        [COLOR="Blue"][B]Randomize[/B][/COLOR]
        RndNumber = Int(Rnd * rndMax)

        If (InStr(1, str1, "," & RndNumber & "," ) = 0) Then
	    str1 = str1 & RndNumber & ","
	    cnt1 = cnt1 - 1
	    objRst.MoveFirst
	    objRst.Move RndNumber
            str = str & objRst("id") & ","
	End If

    Loop
%>
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
والله من که هر چی نگاه میکنم جوابهایی که بهت دادند کامل و کافی هست.
مرسی :)
نه کدوم کامل و کافی هست؟
یکی که کدش چند سطر هست رو هم سر در نیاوردم یعنی گذاشتم ولی هیچی انتخاب نمیکرد...
شما خواهشن برام بازنویسیش کن...
ممنون میشم...

ببخشیدا !!! با توجه به سوال شما دیگه کد کامل تر از این وجود نداره . مگر اینکه شما خواسته باشید کل تابعی که اتصال به دیتابیس و چک کردن connection string و اجرا کردن sql script و گرفتن نتایج و نمایش نتایج و ... انجام می ده را بنویسیم که دوست عزیزمون آقای شیرازی زحمت کشیدن :wacko:
 
بالا