לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #4  
ישן 12-02-2006, 00:10
  חיילבודד חיילבודד אינו מחובר  
 
חבר מתאריך: 03.05.05
הודעות: 108
אני ינסה להסביר שוב..
בתגובה להודעה מספר 1 שנכתבה על ידי חיילבודד שמתחילה ב "רשימת המתנה לפי זמן"

אני ינסה לתאר את זה עם מערכת ד"שים לצורך הדוגמא

גולש באתר מכניס ד"ש דרך מערכת הבנויה ב php
המידע על הד"ש נכנס ל SQL עם ID השולח, תוכן הד"ש והזמן שאותו ד"ש נכנס למערכת

באתר עצמו יש חלון שבו מוצגים הד"שים.. כשבכל פעם מוצג רק ד"ש אחד
אותו ד"ש מוצג למשך 20 דקות מהרגע שהוא נכנס למערכת.. ברגע שהוא ישן
יותר מ 20 דקות הוא נעלם וזה עובר לד"ש הבא

אבל, במידה ובזמן שמוצג הד"ש הראשון באתר ועדיין לא נגמרו לו 20 הדקות
מוזנים למערכת ד"שים נוספים

ככה שאם ד"ש מספר 1 נכנס למערכת בשעה 8:00
וד"ש מספר 2 נכנס למערכת בשעה 8:12
וד"ש 3 נכנס למערכת בשעה 8:17

ד"ש מספר 2 ו- 3 ימתינו שיגמרו לד"ש מספר 1 - 20 הדקות של התצוגה שלו
וברגע שזה יעבור להציג את ד"ש מספר 2 הוא ידע לתת לו 20 דקות מהרגע שהוא מוצג ולא מהרגע שהוא הוכנס למערכת... ואותו דבר עם ד"ש 3 וכן הלאה..

מקווה שזה יותר מובן...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 12-02-2006, 19:52
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 6 שנכתבה על ידי חיילבודד שמתחילה ב "תודה על הרצון"

אוקי אז כמה דברים...
אני הייתי עושה את העיבודים של הזמן ב php, נכון זה פחות יעיל אבל זה תומך גם במסדי נתונים שהם לא mysql ולי זה יותר נוח...

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


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 13-02-2006, 00:51
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 7 שנכתבה על ידי tnadav1 שמתחילה ב "אוקי אז כמה דברים... אני..."

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

השאילתה לשליפת הד"ש הראשון שנכתב ב-20 דקות האחרונות:
קוד:
SELECT * FROM dash WHERE id=(SELECT MIN(id) FROM dash WHERE NOW() < DATE_ADD(insertDate, INTERVAL 20 MINUTE))

כמובן שעל המערכת לתמוך בשאילתות משנה (MySQL 4.1 ומעלה - אם אני לא טועה...), אחרת צריך לפרק את זה ל-2 שאילתות.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 13-02-2006, 12:12
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 9 שנכתבה על ידי GreenBerret שמתחילה ב "אם אני מבין נכון את..."

ננסה ליצור תרשים של סדר הפעולות:
1. ד"ש ראשון בשעה 03:35 (איש מחשבים שעובד בשעות המתאימות...) שמקבל כמובן את ה-id 1
2. לאחר 10 דקות (03:45) ד"ש נוסף.
3. לאחר 5 דקות נוספות (03:50) ד"ש נוסף.
4. 10 דקות (04:00)
5. 04:05

ובעברית מדוברת:
1. 03:35
2. 03:45
3. 03:50
4. 04:00
5. 03:05

גולש שיכנס בין השעה 03:35 עד 03:55 יקבל את הראשון, דקה לאחמ"כ את השני, 20 דקות לאחמ"כ את השלישי.
כל ד"ש "זמין" למשך כ-20 דקות.
20 דקות לאחר הזנת הד"ש האחרון לא יוצג כלום, וצריך כמובן להציג למשתמש שלא נמצא ד"ש "עדכני" במערכת.
קוד PHP:
 if(!$dash mysql_fetch_assoc(mysql_query("SELECT * FROM dash WHERE id=(SELECT MIN(id) FROM dash WHERE NOW() < DATE_ADD(insertDate, INTERVAL 20 MINUTE))")))
    echo 
"לא נמצאו דשי\"ם לתצוגה";
else
{
    echo 
$dash['name'];
    echo 
$dash['insertDate'];
    echo 
$dash['body'];
    echo 
$dash['email'];


ועכשיו לשאילתה:
כמו בכל שפת תסריט וחישוב מתמטי מתחילים כמובן מהפנימי.
* השאילתה הפנימית מחפשת את ה-id הכי נמוך מהין הדש"ים שהוזן ב-20 דקות האחרונות. זאת אומרת את הראשון שהוזן ב-20 דקות האחרונות.
* השאילתה מחפשת את כל הדשים שהוזנו ב-20 דקות האחרונות, שבא נאמר הן: 1,2,3
והכי נמוך זה כמובן 1
* גולש שיכנס בשעה 04:01 יהיה במצב של 3 דשים מתאימים לתצוגה (קרי לא עברו עדיין 20 דקות), כשהנמוך מביניהם זה דש בעל id מספר 2.
* לאחר שיש לנו את ה-id המתאים אנו שולפים (באמצעות השאילתה החיצונית) את כל פרטי הדש לפי ה-id הנבחר בשאילתה הפנימית.

הארכתי יותר מדי... בתכלס אתה צודק, זה באמת בעיה, אך תלוי כמובן איך בעל האתר רוצה שזה יעבוד. כמו גם אם הוא מעונין שלאחר 20 דקות של האחרון לא להציג כלום, או שאם אין לאחר מכן עוד דש להציג תמיד את האחרון במקום הודעה שאין ד"ש.

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

המשך יום נעים

נערך לאחרונה ע"י ישראל K בתאריך 13-02-2006 בשעה 12:14.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 12-02-2006, 22:24
  GreenBerret GreenBerret אינו מחובר  
 
חבר מתאריך: 13.12.05
הודעות: 1,963
בתגובה להודעה מספר 6 שנכתבה על ידי חיילבודד שמתחילה ב "תודה על הרצון"

פתרון אחר יהיה...

תיצור טבלה חדשה, שהיא תיהיה טבלה של הד"שים שמחכים להצגה (סוג של queue)
לכל ד"ש, בנוסף לנתונים הרגילים, תוסיף נתונים של:
ID מספור אוטומטי, התחיל להציג בשעה (תאריך/זמן), סטטוס תצוגה, הוצג בעבר.

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

סטטוס תצוגה:
מוצג כרגע - הד"ש כרגע מוצג.
לא הוצג עדיין - ד"ש שמחכה לתצוגה.

הוצג בעבר:
אם הד"ש הוצג בעבר.

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

יהיה ID עם מספור אוטומטי (אני מקווה שבזה אתה משתמש), שבעזרתו תוכל לסדר את הד"שים לפי הסדר שהכניסו אותם (מטבעו של מספור אוטומטי).

בכל טעינה של עמוד, תריץ שאילתה של: הד"שים שלא הוצגו בעבר, לפי הסדר של ID.
אם הד"ש שקיבלת מוצג עכשיו, וזמנו עבר: תעביר אותו להוצג בעבר (או שתמחק אותו), ותעדכן בד"ש הבא, מוצג כרגע עם הזמן של אותו רגע.

זה בעקרון הבסיס.


אתה יכול לעשות את זה קצת יותר מתוחכם.
שאילתה של גם מוצג כרגע וגם לא עבר 20 דקות / עברו 20 דקות.
אם אתה לא / כן מקבל תוצאה.
תריץ שתי שאילתות:
1. תסמן את מה שמוצג כרגע, כהוצג בעבר. (או שתמחק אותו)
2. ותשתמש בהגבלה של רשומה אחת, עם סידור של ID, עם חיפוש לאלו שלא הוצגו בעבר, ותסמן אותו כמוצג עכשיו עם הזמן של עכשיו.



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

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 21:20

הדף נוצר ב 0.06 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2026 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר