|
הרשם | ![]() |
שאלות ותשובות | ![]() |
רשימת חברים | ![]() |
לוח שנה | ![]() |
הודעות מהיום | ![]() |
חיפוש | ![]() |
|
![]() |
![]() |
|
כלים לאשכול | תצורת הצגה |
![]() |
# 1 |
חבר בקהילה
|
שאלה לגבי בנייה נכונה של סקריפט דירוגים PHP
יש לי סוג של מערכת סיקורים באתר. ורציתי לבנות אפשרות, שמשתמשים יוכלו לדרג כל סיקור.
חשבתי על שתי דרכים לבנות את המערכת, ורציתי לדעת מהי הדרך החכמה, והכי חסכונית במשאבים. הדרך הראשונה: לבנות טבלה, שמקבילה לטבלת הסיקורים, שבעצם כל משתמש שיידרג סיקור מסויים, המערכת תוסיף רשומה עם הID שלו, הציון שהוא נתן לסיקור,והID של הסיקור, ואחרי שהמערכת מוסיפה את הנתונים לטבלה, היא שולפת את כל הדירוגים של אותו הסיקור, מחשבת מה הדירוג (על ידי זה שהיא מחברת את כל הדירוגים של כולם, ומחלקת אותם במספר הדירוגים ) ומעדכנת את השדה של הסיקור (בטבלה של הסיקור) בערך שהיא הגיע אליו. הדרך השנייה להוסיף עוד שני שדות במבנה של הטבלה של הסיקור, אחד של אלה שדירגו כבר, ואחד של סכום הדירוגים של כולם. כל פעם שמישהוא ידרג המערכת תוסיף אותו לשדה של המשתמשים שדירגו כבר (השדה יופרד בעזרת פסיקים...). ואז כל פעם שהדף ייטען המערכת תחשב כמה אנשים דירגו, ותגיע לתוצאה של הדירוג באותה הדרך כמו באפשרות למעלה. החיסרון באפשרות הזאתי היא שטיפה יותר מסובך לבנות אותה. את שתי הדרכים אני מבין ומסוגל לבצע בקלות, השאלה היא איזה דרך היא יותר נכונה מבחינת חיסכון במשאבים, והאם יש הבדל משמעותי בינהן. תומר (: |
![]() |
![]() |
# 2 |
חבר וותיק
|
this is 2 different solutions to the same problem
in the first case, you aimed to creating another table i would use that if i wanted to know who voted what and for what item the second options is having a 'rate' field in the items and 'raters' field then when someone adds their rate, you are increasing raters by one and raise 'rate' by his numeric value of his vote then when you want to know the average vote you just divide the votes by the voters this is useless when you want to know who voted what personally, i would use the first one just make some index's and use the right datatypes for each of the columns good luck mate
__________________
![]() |
![]() |
![]() |
# 3 | ||
חבר בקהילה
|
ציטוט:
לא הבנתי את המשפט האחרון ציטוט:
|
||
![]() |
![]() |
# 4 |
חבר מתקדם
|
תשמע תחפש פה בפורום גם לי הייתה את הבעיה ונתנו אחלה פתרון..
__________________
PHP קוד:
|
![]() |
![]() |
# 5 |
חבר וותיק
|
הדרך הראשונה היא היותר נכונה לדעתי..
אבל במקום לחשב את סכום הדירוגים וחלק ב מספר המצביעים פשוט תשתמש ב AVG בשליפה מהמסד והוא יחסוך את החישוב.. ואין צורך לעדכן את טבלת הסיקורים פשוט למשוך את ה AVG מהמסד יחד עם שאר הנתנוים ע"י JOIN
__________________
בברכה עובד, מפתח אתרים. |
![]() |
![]() |
# 6 |
חבר מתקדם
|
אם אתה מגדיר עמודה מסויימת בתור INDEX האופטימיזציה שלה טוב יותר ואם צריך לבצע שאילתות הם יבוצעו מהר יותר. במילים אחרות זה מומלץ לטבלאות/עמודות עם הרבה תוכן שצריך אחר כך לבצע שאילתות אליהם.
|
![]() |
![]() |
# 7 |
חבר מתקדם
|
|
![]() |
![]() |
# 8 | |
חבר בקהילה
|
ציטוט:
![]() העמודה של הID, אותה אני תמיד מגדיר כINDEX... זה מה שהתכוונת אליו? |
|
![]() |
![]() |
# 9 |
חבר וותיק
|
עושים את זה ע"י בניית שאילתה נכונה.
[php] select *,AVG(`rates`.`rate`) as `avgrate` from `reviews` join left `rates` on `reviews`.`id` = `rates`.`review`group by `reviews`.`id` [\php] זה נראה לי אמור לעבוד, אם לא נסה ללמוד על פונקציות שהשתמשתי פה ושנה לפי הצורך..
__________________
בברכה עובד, מפתח אתרים. |
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|