![]() |
שאלה | שאילתא
HTML קוד:
SELECT DISTINCT COUNT(ID) AS number, PageCode אני רוצה להשיג את 10 הדפים הכי נצפים מסוג 2 (PageType) השאילתא מחזירה לי רק שורה אחת וגם היא לא הדף הכי נצפה |
מה המטרה של ה- DISTINCT וה- COUNT כאן?
על פי השאילתה אני מניח שכל שורה מציינת דף ומס' הצפיות של אותו דף שמור בשדה number, אז תשלוף את השדות שאתה צריך, תסנן שורות עם WHERE ותעשה ORDER BY number DESC בדיוק כמו שעשית - זה מספיק. |
לא הבנתי בכלל מה עשית בקוד, הקוד צריך להיות משהו כמו
PHP קוד:
|
המטרה שלי היא להגיע לדפים הכי נצפים מסוג דף 2 (pagetype) , ה-count נועד לספור את מספר ה-ID של הכניסות לדף מספר X
הטבלה בנויה כך : ID IP TIME PageType PageCode אני צריך לשלוף את הקוד דף של 10 דפים מסוג 2 שיש להם הכי הרבה צפיות (יותר שורות בטבלה) השאילתא שרשמתי כאן דיי מאולתרת כי ניסיתי המון ניסוחים שונים ולא הצלחתי להגיע לתוצאה שאני צריך |
אני אנחש ששדה ה-ID זה מזהה ייחודי של העמוד.
אני לא רואה באיזה שדה אתה שומר את כמות הצפיות שלך. |
הטבלה עצמה היא כמות הצפיות
|
שיטה די עקומה לספור צפיות לפי דעתי.. אבל זה צריך להיות ככה:
קוד:
SELECT COUNT(*) AS number, PageCode FROM entries WHERE PageType=2 GROUP BY ID ORDER BY number DESC |
a
ציטוט:
|
ציטוט:
לחילופין היה כדאי פשוט להחזיק מונה שאתה מוסיף לו +1 כל צפיה. מה שכן, צורת עבודה כזאת הכרחית במצבים בהם אתה רוצה לאגור גם מידע על הצפיה עצמה (כמו מה שאתה עושה: IP, תאריך ושעה וכו'). |
ציטוט:
והשאילתא של איתי לא עבדה כמו שרציתי |
משהו כזה לדעתי:
קוד:
Select *, count(*) as viewsCount מה הבעיה עם השאילתה שלו/שלי? |
ציטוט:
ציטוט:
פשוט בכל דף תתן גם עמודה "IP" שתפריד כל IP בסימן "|" לדוגמא הטבלה תראה כך: ID - מזהה העמוד (לדוגמא - 3) VIEWS - מספר צפיות בעמוד (לדוגמא - 2) IP - הIPים שצפו כבר בעמוד (לדוגמא - "123.256.23.31|88.62.642.12) pageType - מה שאמרת, "סוג הדף" (נניח שכמו שרצית הסוג הוא 2) עכשיו פשוט בכל פעם לפני שאתה מוסיף לעמוד +1 בכמות הצפיות (VIEWS) אתה בודק אם הIP של מי שצופה בדף שווה לאחד מהIPים שנשמרו בעמודה "IP". אתה יכול לבצע את הכנסת הIP והבדיקה אם הוא כבר קיים ע"י EXPLODE פשוט של העמודה, הנה קוד דוגמא (נניח שהערכים שהבאתי לעיל הם ערכי הטבלה): PHP קוד:
כמובן שיש עוד דרכים לכתוב אותו, אולי אפילו בדרכים יעילות יותר אבל אני לא מאמין שזה משמעותי כל כך.. עכשיו את הקוד שביקשת בהתחלה הרבה יותר פשוט לכתוב, כמובן שחוץ מזה שיותר פשוט לכתוב מעכשיו לא תכנס לך כל פעם רשומה חדשה למסד עם כל צפייה ייחודית... אני די בטוח שאת הקוד שביקשת בהתחלה לאחר השינוי אתה תדע לכתוב אבל בכל זאת, שנעשה עבודה מלאה (: PHP קוד:
|
ציטוט:
אני חושב ליישם זאת תודה על העזרה אפשר לנעול אני אסתדר מכאן |
ציטוט:
לדעתי זה פתרון לא טוב. בצורה כזאת מגיעים למצב שבו מעדכנים שדות מאוד ארוכים של טקסטים הרבה פעמים. ל-DB יותר קל להוסיף רשומות חדשות מאשר לעדכן שדה טקסט גדול מאוד. כמו כן לבצע חיפוש על טקסט זו גם פעולה יחסית יקרה. אני הייתי הולך על רשומה ייחודית לכל אחד. ככה בעתיד גם ניתן לבצע חיתוכים מעניינים במידת הצורך (לדוגמה לפי תאריך או במה צפה כל IP וכו') |
ציטוט:
וטבלה נוספת למידע מפורט של כל צפייה (אם אתה צריך). |
ציטוט:
למה שאתה מתאר באמת נראה לי הכי נכון לפעול כמו שעבדת, אבל אין סיבה סתם להפעיל שאילתות שמעמיסות כמו זאת שכתבתי קודם, השאילתה בעצם תעבור (אם מדובר על צפיות באתר חיי) על אלפי רשומות ותבצע סינונים, זה דבר שמעמיס ולוקח זמן מצד שני, כשאתה מבצע את השאילתה שמכניסה את הערכים האלו, לעדכן שדה נפרד ב +1 זה לא כזה נורא. ככה רק כשאתה צריך את הנתונים האלה ספציפית תשתמש בהם, בשאר הזמן תשתמש בשדה שמתעדכן בפלוס 1 בכל פעם |
כל הזמנים הם GMT +2. הזמן כעת הוא 16:39. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ