643
צפיות
צפיות
20
תשובות
תשובות
שאלה
אני משתמש בmysql.
אני מעוניין לשלוף את ששת הרשומות האחרונות שלי ובצורה רנדומלית.
אני מנסה לשלוף בצורה הבאה:
select * from article where permitt1=2 and id>max(id-6)
אבל זה לא ממש עובד….
כיצד עושים זאת?
אני משתמש בmysql.
אני מעוניין לשלוף את ששת הרשומות האחרונות שלי ובצורה רנדומלית.
אני מנסה לשלוף בצורה הבאה:
select * from article where permitt1=2 and id>max(id-6)
אבל זה לא ממש עובד….
כיצד עושים זאת?
20 תשובות
נסה את זה:
select * from article order by rand() limit 6
איך עושים את זה עם אקסס?
ע"י dFirst ו-dLast
לפי קבצי העזרה של האקסס
DFirst, DLast Functions
You can use the DFirst and DLast functions to return a random record from a particular field in a table or query when you simply need any value from that field. Use the DFirst and DLast functions in a macro, module, query expression, or calculated control on a form or report.
DFirst(expr, domain, [criteria])
DLast(expr, domain, [criteria])
The DFirst and DLast functions have the following arguments.
expr – An expression that identifies the field from which you want to find the first or last value. It can be either a string expression identifying a field in a table or query, or an expression that performs a calculation on data in that field . In expr, you can include the name of a field in a table, a control on a form, a constant, or a function. If expr includes a function, it can be either built-in or user-defined, but not another domain aggregate or SQL aggregate function.
domain – A string expression identifying the set of records that constitutes the domain.
criteria – An optional string expression used to restrict the range of data on which the DFirst or DLast function is performed. For example, criteria is often equivalent to the WHERE clause in an SQL expression, without the word WHERE. If criteria is omitted, the DFirst and DLast functions evaluate expr against the entire domain. Any field that is included in criteria must also be a field in domain; otherwise, the DFirst and DLast functions return a Null.
Remarks
Note If you want to return the first or last record in a set of records (a domain), you should create a query sorted as either ascending or descending and set the TopValues property to 1. For more information, see the TopValues property topic. From Visual Basic, you can also create an ADO Recordset object and use the MoveFirst or MoveLast method to return the first or last record in a set of records.
הכוונה היתה ל ASP + Access
אני לא סגור על מה שאתה רוצה
אתה רוצה קודם להגריל ואז לשלוף 6 רשומות אחרונות או קודם לשלוף 6 רשומות אחרונות ואח"כ להגריל את הסדר?
לשניהם יש פיתרון (שני הדרכים שהבאת)
דרך ראשונה (להגריל ואז לשלוף) – אם אתה יודע מראש כמה רשומות יש לך במסד אז אתה יכול לבחור מס' רנדומלי ע"י הפונקצייה שמוציאה מס' רנדומלי ולאחר מכן לשלוף את הרשומה שיש לה את ה-ID שווה למס' הרנדומלי (דוגמא ב-JS צד שרת)
var rndNum = Math.Random()*numOfRec
var query = "SELECT * FROM tbl WHERE id="+rndNum
rs.Open(query, oConn);
דרך שנייה (לשלוף ואז להגריל) – לעשות כמו הדרך הראשונה רק שכאן שולפים את כל הרשומות לאחר מכן מעבירים את כל הרקורדסט לתוך מערך getRows ולאחר מכן עושים את הפונקציה שמוציאה את המס' הרנדומלי ושולפים בעזרת ה-getrows את הרשומה שלנו (VBS)
dim query, rndNum, cntRec
Randomize()
query = "SELECT tbl.id FROM tbl"
rs.Open query,oConn,3
cntRec = rs.recordCount
recArray = rs.getRows();
rndNum = cint((cntRec-1+1)*Rnd()+1)
Response.Write(recArray(0,rndNum)
תיקון קטן בקוד הJS
var rndNum = Math.round(Math.random()*numOfRec)
var query = "SELECT * FROM tbl WHERE id="+rndNum
rs.Open(query, oConn);
יש דרכים טובות יותר
ובקשר לראשונה – היא בכלל לא תחזיר לך שש רשומות.
בכל מקרה אפשר לעשות הכל ברמת ה SQL.
שליפה רנדומאלית ברמת ה SQL באקסס הולכת בצורה הבאה [בשביל MySql ו SQLServer יש פתרונות אלגנטיים בהרבה]:
אם אתה רוצה קודם להגרית ואז לשלוף את ששת הרשומות הראשונות זה הולך כך:
var w=Math.random()*4;
var x=Math.random()*10;
var y=Math.random()*3;
var z=Math.random()*6;
sql="";
sql+="SELECT top 6 id,* ";
sql+="FROM tbl ";
sql+="ORDER BY cos("+z+"*(sin(cos(-Sin(tan(sqr(id)*"+y+"))*tan(id)*sin(id*tan(id)))/2*"+x+"*tan(id))))*sin(id*tan(id*cos(id)*cos(id)*Sin(id*tan(id*cos(id)))*tan(90-id*cos(id)*sin(id)))*sin("+w+")*cos(id)) DESC";
rs.Open (sql,Conn);
אם קודם לשלוף שש ראשונות ואז להגריל את הסדר זה הולך כך:
var w=Math.random()*4;
var x=Math.random()*10;
var y=Math.random()*3;
var z=Math.random()*6;
sql="";
sql+="SELECT id,* ";
sql+="FROM tbl ";
sql+="WHERE id in (Select top 6 id from tbl order by id desc) ";
sql+="ORDER BY cos("+z+"*(sin(cos(-Sin(tan(sqr(id)*"+y+"))*tan(id)*sin(id*tan(id)))/2*"+x+"*tan(id))))*sin(id*tan(id*cos(id)*cos(id)*Sin(id*tan(id*cos(id)))*tan(90-id*cos(id)*sin(id)))*sin("+w+")*cos(id)) DESC";
rs.Open (sql,Conn);
מה שעשינו פה בעצם זה ליצור רנדום בעזרת קצת מתמטיקה [ותודה לטריגו מקרב לב], כיוון שאין פונקציה מוכנה שאקסס מספק לנו [למען האמת יש, אבל היא מגרילה פעם אחת ומחזירה תמיד את אותה התוצאה ]
אוריקס?
מה גרם לך לכתוב את הקוד הזה (חחח)
var w=Math.random()*4;
var x=Math.random()*10;
var y=Math.random()*3;
var z=Math.random()*6;
sql="";
sql+="SELECT id,* ";
sql+="FROM tbl ";
sql+="ORDER BY cos("+z+"*(sin(cos(-Sin(tan(sqr(id)*"+y+"))*tan(id)*sin(id*tan(id)))/2*"+x+"*tan(id))))*sin(id*tan(id*cos(id)*cos(id)*Sin(id*tan(id*cos(id)))*tan(90-id*cos(id)*sin(id)))*sin("+w+")*cos(id)) DESC";
rs.Open (sql,Conn);
נלקח
אני לא בטוח שזה יעבוד באקסס אבל הנה עוד משהו
לעשות ב-orderBy את הפונקציה newId()
SELECT * FROM tbl ORDER BY newId()
לא שמתי לב שהוא כתב 6 רשומות אקראיו
אני התייחסתי לרשומה אחת.
בכל מקרה לא רפרשתי את הדף ולכן ההודעה למטה לא עדכנית (אבל השאלה שבה כן)
בשני הדרכים כתבת אותו קוד. אני התחלתי ללמוד רק השנה טריגו (ושהיא תמות אמן) (למרות שאני רק בכיתה ח') אז ככה שלא הבנתי שום דבר מהחלק של ה-order by שיש אצלך
חחחחחח
מה שמעניין אותי, זה מי חשב על הדרך עם הטריגו'
אפילו במבחן בגרות 5 יח"ל, אין פונקציות טריגונומטריות מסובכות כל כך
אמנם נלקח מה FAQ של תפוז
אבל אני כתבתי את זה… אז מותר לי
[זה הטריד אותי יומיים וידעתי שחייבת להיות דרך, בסוף מצאתי].
בכל מקרה מה שכתבת יעבוד רק ב SQLServer. ב MySQL יש את Rand().
הייתי מפקק אותך אבל "צוות האתר" חשב על זה קודם
הוא פיקק אותך
הוא = צוות האתר = הם/ן
זה אני פיקקתי את עצמי
אם לילדה מותר אז גם לי מותר
אז למה אמרת שצוות האתר
פיקק אותי (והכנס את המושג פיקוק למילון אבן שושן )
צוות האתר לא פיקק אותך
התשובה לשאלה הזאת הייתה קיימת בFAQ עוד לפני שאתה נתת אותה
הסבר קצר לניר.
בעצם, חיפשתי דרך לעשות את אותן הפעולות על אותם המספרים אבל לאבד את הסדר המקורי. אם הייתי מכפיל ב2, לדוגמא, הסדר היה נשמר…
הטריגו עוזרת לי בזה שהיא מפרקת את הסדר שהיה.
אתה מץכוון ל-newId() ?
כן