![]() |
עזרה,שיטה לקבלת מיקום שורה
אהלן
חרשתי על כל האינטרנט ולא ממש מצאתי פיתרונות, יש לי טבלה של נגיד 100 אנשים לכל אחד יש ניקוד אני רוצה לבדוק איפה מישהו מסויים נמצא מתוך כל האנשים האלה לדוגמה יש א-1 ב-5 ג-4 ד-9 ה-0 אני רוצה לבדוק איפה ג נמצא ביחס לשאר,אני מסדר אותם לפי הניקוד ע"י ORDER BY DESC ואז אני צריך לבדוק באיזה מיקום הוא נמצא יש למישהו רעיון איך לבצע את זה? (בלי לולאה ארוכה שמחפשת את מי שאני צריך?) |
אתה יכול לשלוף COUNT של כמות השורות עם ניקוד יותר גבוהה.
כדי להוציא את המיקום של ג' תשלוף את כמות השורות עם ניקוד גדול יותר מ4, ותוסיף לזה 1 וקיבלת את המיקום של ג'. |
אני לא חושב שהבנתי אותך, אבל אם כן אני בטוח שזה יעזור:
תשלוף על פי ORDER BY score ASC זאת אומרת על פי הניקוד הכי נמוך ועד הכי גבוה תצור משתנה קוד:
$count = 0; קוד:
$count++; אם אתה רוצה לדעת את המקום לכל אחד, תצטרך לשמור מערך שיכיל את הID ו המקום וכו'.. או במסד נתונים, איך שנוח לך. |
הביאו לך כבר 2 פתרונות *שיכולים לעבוד, להלן 2 פתרונות נוספים:
1. לשלוף את כל הרשומות מסודרות מהניקוד הגבוה לנמוך בפעם אחת ולרוץ על המערך שחזר באמצעות php עד שאתה מגיע לשורה הרצויה (אין צורך ליצור counter נוסף, האינדקס של האיבר + 1 = המיקום של המשתמש), ניתן לייעל את זה באמצעות פיצול המידע (לדוג' אתה יכול לפצל את הרשומות ל- 2 חלקים שווים, להשוות את הניקוד של המשתמש לניקוד של השורה האמצעית ואז לרוץ רק על חלק אחד בהתאם). 2. בדומה לפתרונות הקודמים שהוצעו רק הפעם ליישם את זה ב- MySQL עצמו באמצעות Stored functions\ Stored procedures (יש לבדוק צריכת משאבים ומשמעויות נוספות, לדעתי זה פחות יעיל). 3. לבצע הערכת מיקום פעם ב- X זמן, לשמור את המיקום של כל משתמש ולהשתמש בנתון הנ"ל בלבד (לא יספק הערכה בזמן אמת אבל מבחינת ביצועים יתן את התוצאה הטובה ביותר). *הערות: א. בפתרון שהציע BuildDream יש לקחת בחשבון ניהול כפילויות (מס' משתמשים בעלי ניקוד זהה). ב. את הפתרון שהציע Haimz אני חושב שהפתרון שהצעתי מחליף בצורה טובה ויעילה יותר. ממליץ לך להחיל אינדקסים מתאימים ולרוץ עם כל הפתרונות. ניתן לחלק אותן ל- 2 קטגוריות עיקריות, תבדוק מה הכי יעיל עבורך - 1. שליפת כל הרשומות ומעבר עליהן באמצעות PHP (חסרון עיקרי: שליפה של המון מידע שלא בהכרח נחוץ). 2. העברת הלוגיקה למסד הנתונים ו/או שליפת רשומות עם ניקוד גבוה/נמוך יותר בלבד והערכת מיקום המשתמש בהתאם (חסרון עיקרי: עבודה מואמצת של מסד הנתונים). כמו שאתה רואה ניתן לבצע את המשימה בכמה דרכים שונות, קח בחשבון שרובן לא יהיו יעילות עבור טבלאות גדולות. לטבלה עם 100 רשומות ומס' קטן של הרצות זה כנראה לא יהיה קריטי - לטבלאות גדולות יותר ולאתרים עמוסים יותר פעולה כזו יכולה להעמיס על השרת בצורה משמעותית. בהצלחה. |
ציטוט:
אם תוסיף לשאילתה שלך ערך נוסף שעולה כל פעם באחד (פשוט להוסיף משתנה לשאילתה) - חסכת לעצמך לולאה ושיפרת ביצועים. |
ציטוט:
מי מבטיח לך ש- MySQL עושה את זה בצורה מהירה ויעילה יותר מ- PHP? תפקיד מסד הנתונים הוא לאחסן מידע, ברוב המקרים רצוי להשאיר את תפקידו ככזה ולהימנע מביצוע לוגיקה בצד שלו. |
ציטוט:
|
ציטוט:
|
ציטוט:
אני לא יכול להצביע על הפתרון הטוב ביותר במקרה הנ"ל (שכן תלוי איך אתה מגדיר "טוב ביותר"), אני ממליץ לבדוק את כל הפתרונות שהוצעו ולראות מה הכי משתלם והכי מתאים. |
|
כל הזמנים הם GMT +2. הזמן כעת הוא 09:01. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ