הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   שיטת אחסון מידע (https://hosts.co.il/forums/showthread.php?t=86571)

Second 03-12-10 17:22

שיטת אחסון מידע
 
כבר הרבה זמן אני חושב על הנושא הזה, ורציתי לשמוע דעות שונות משלי בנושא.
אז ככה, אני צריך לשמור מידע דינאמי שמוגדר בתוך טבלה דו מימדי, בתוך ה-DB שלי.

דוגמא:
אני רוצה לשמור את כל המשחקים שקיימים במחזור מסויים בליגת העל.
לכן אני אמור להגדיר את נתוני המשחק:
  • קבוצה ביתית
  • קבוצת חוץ
  • זמן המשחק
ואני מכניס כמה משחקים ככה שנוצר לי מערך דו מימדי, שמוגדר בסופו ככה:
PHP קוד:

$gameList = array(
    array(
        
'home' => 2,
        
'away' => 1,
        
'time' => 4324144322
    
), array(
        
'home' => 3,
        
'away' => 5,
        
'time' => 3423123123
    
), array(
        
'home' => 4,
        
'away' => 6,
        
'time' => 4324425123
    
)
); 

עכשיו כשאני ניגש למערך ורוצה לשמור אותו ב-DB, יש לי בעיה.
ברור שאני יכול להשתמש ב-JSON כי זה הכי פשוט ונוח אבל זה לא יעיל!
כי הפלט שלו כולל את שמות המשתנים ( כמו home, away ו-time ). ולכן נשמר לי מידע על ה-DB שלכאורה אני לא צריך.

עכשיו אני בונה פונקציה שתטפל בנתונים כאלה ותעזור לצמצם את המידע שנשמר ב-DB למינימום הנדרש. אבל היא עדיין בחיתולים ואני לא יודע עד כמה היא יעילה.

אשמח לשמוע מה אתם חושבים בנושא, ואיך אתם מאחסנים טבלה דו מימדית דינאמית אצלכם באתר.

Shay Ben Moshe 03-12-10 19:07

אתה מגדיר טבלה של מחזורים.
טבלה של משחקים.
טבלה של קבוצות.

כל משחק מכיל שדה של id של המחזור שלו ושל שתי הקבוצות שמשתתפות.

מאוד פשוט דווקא.

Second 03-12-10 19:30

דווקא את השיטה הזו אני לא מעדיף.
כבר פירטתי שפונקציה זו היא דינמית, יוצא לי הרבה פעמים להכניס מערכים דו מימדיים.
ואי אפשר לכל אחד לעשות טבלאות על גבי טבלאות..

BlueNosE 03-12-10 21:22

1. לא יודע כמה json עדיף פה על serialize. שווה לבדוק את זה ברצפי קוד שונים ולבדוק את הגדלים השונים שמתקבלים.
2. במקום home, away, time תוכל להשתמש ב0,1,2, בידיעה מה כל מספר מייצג. ככה אפילו לא תצטרך את המספור - הרי ברור שהאיבר הראשון הוא home, השני away והאחרון time.

מעבר לזה יכול להיות שבאמת רשומה לכל משחק תהיה עדיפה. כלומר טבלה שתהיה בנויה מ-3 עמודות עיקריות, במקום עמודה אחת שמכילה את כל הנתונים.
ככה גם תוכל לשלוט בתוכן יותר טוב - לספור כמות משחקים, לשלוף רק משחקים ספציפיים וכו'.

בהצלחה

~The_Sultan~ 05-12-10 08:56

בלונוז, במקרה שנתת אין לו את התוצאות הממשית שהייתה במשחקים.
לדעתי אם אתה רוצה להכניס את כל הנתונים האלו למסד, יש לך שתי אפשרויות:
בשיטה הראשונה אתה חוסך במקום במסד, אבל זה פחות מסודר, לכן תשתמש בה רק אם המקום חשוב לך: תעשה foreach למערך הראשון, ואז בכל לולאה תשתמש בתת-מערך להכנסת האיברים שלו לתוך משתנה אחד. לדוגמה:

PHP קוד:

$i 0;
foreach (
$array as $key) {
    
$results $key[$i]['home']."|".$key[$i]['away']."|".$key[$i]['time'];
    
mysql_query...
    
$i++;


בשאילתה אתה מכניס את התוצאות ששמורות לך לתוך שורה אחת במסד, עם עמודה אחת. אחרי זה, כשאתה צריך להשתמש בתוצאות, אתה משתמש בפונקציה explode.

אפשרות שניה, תשתמש באותה לולאת foreach רק שתעשה עוד לולאת foreach בתוך, ותכניס את כל הנתונים של התת-מערך לתוך 3 עמודות.

בהצלחה,
חג שמח. :)


כל הזמנים הם GMT +2. הזמן כעת הוא 14:33.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ