הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 03-04-11, 20:25   # 1
gillllll
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
הודעות: 363

gillllll לא מחובר  

בעיה בשאילתא

קודם כל אני שונא את הכיתוב הבא- זו השגיאה:
#1547 - Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted

עכשיו למה :

הבעיה כזו רשמתי קוד SQL לתפארת מדינת ישראל עד שרציתי לעשות שהרשומות שיוצגו יהיו תלויות ב WHERE של תאריכים. לא עבד אז קיצצתי מהשאילתא שלי עד שנשארתי עם השאילתה הפשוטה הזו.... והבעיה עדין קיימת

select * from articles where sendtime between getdate()-6 and getdate()

שימו לב איפה כנראה הבעיות...
1. השדה SENDTIME הוא מסוג TIMESTAMP
2. העמודה SENDTIME מכיון שהכנסתי אותה אחרי שכבר היו כתבות יש המון כתבות לפני שהכנסתי לשם תאריך שיש בהם NULL .

ניסיתי להשתמש גם בפונקציה של DATEADD בשביל שליפת הכתבות מ6 הימים האחרונים אבל ללא הועיל - הבעיה נשארת .
מה לפי דעתכם הגורם ומה אפשר לעשות?
__________________
- חייך הכל לטובה .
  Reply With Quote
ישן 03-04-11, 20:42   # 2
IgalSt
מנהל פורום, עסק רשום
 
IgalSt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: המרכז
גיל: 37
הודעות: 1,432
Send a message via Skype™ to IgalSt

IgalSt לא מחובר  

אם אתה חושב שהבעיה היא בכך שיש הרבה ערכים שהם NULL, למה שלא תתן ערך ברירת מחדל של איזשהו תאריך בעבר הרחוק? לדוגמא 2000-01-01?

למרות שמהשגיאה שאתה מקבל עושה רושם שהבעיה היא במקום אחר.
שאילתות select פשוטות כמו select * from articles limit 10 עובדות?
  Reply With Quote
ישן 03-04-11, 22:55   # 3
gillllll
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
הודעות: 363

gillllll לא מחובר  

כן זה עובד ברגע שאני מוחק את בדיקה של התאריך העניין הוא שאתם באמת חושבים שזו הבעיה או שאולי אי אפשר לבצע את ההשוואות של BETWEEN או DATEADD על TIMESTAMP ?
__________________
- חייך הכל לטובה .
  Reply With Quote
ישן 04-04-11, 09:08   # 4
IgalSt
מנהל פורום, עסק רשום
 
IgalSt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: המרכז
גיל: 37
הודעות: 1,432
Send a message via Skype™ to IgalSt

IgalSt לא מחובר  

נראה לי הבנתי מה הבעיה שלך.
עד כמה שאני יודע, ובעקבות חיפוש קצר בגוגל, אין ל-mysql פונקציה getdate().
לפיכך, אתה לא יכול להכליל אותה בשאילתא שלך.

אני לא מתכנת PHP, אבל אני מניח שמדובר בפונקציית PHP. כך שהאפשרות הראשונה שלך היא להכיל את הערך שהיא מחזירה בשאילתא שלך ולא את הפונקציה עצמה. פשוט תשרשר את זה לשאילתא שלך.
האפשרות השניה היא להשתמש בפונקציות המובנות של mysql. למידע נוסף אודות פונקציות זמן ותאריך ב-mysql
  Reply With Quote
ישן 04-04-11, 10:50   # 5
gillllll
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
הודעות: 363

gillllll לא מחובר  

שמע אני חייב לציין שכנראה עלית על משהו....
אז שחקתי עם זה קצת...
והגעתי לדבר זה ...
select * from articles as s where (date(s.sendtime) between date (now()) and date(now())-7)
וגם לדבר הזה:

select * from articles as s where (s.sendtime between date (CURRENT_TIMESTAMP()) and date(CURRENT_TIMESTAMP())-7)

וגם לדבר הזה:
select * from articles as s where s.sendtime between CURRENT_TIMESTAMP() and CURRENT_TIMESTAMP()-7

כל האופציות הללו לא מחזירות שגיאה שזה כבר מנחם אבל גם לא מחזירות רשומות למרות שיש רשומות בתאריכים הללו...
__________________
- חייך הכל לטובה .
  Reply With Quote
ישן 04-04-11, 11:43   # 6
IgalSt
מנהל פורום, עסק רשום
 
IgalSt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: המרכז
גיל: 37
הודעות: 1,432
Send a message via Skype™ to IgalSt

IgalSt לא מחובר  

לדעתי אתה אמור ללכת על השאילתא האחרונה.
מה שכן, אני לא בטוח שהמינוס 7 שאתה שם שם זה אכן 7 ימים. מאוד יכול להיות שמדובר ב-7 שניות.
אתה אמור להשתמש בפונקציה מובנת נוספת שתקבל את התאריך הנוכחי ותחסיר ממנו שבעה ימים.
נסה להשתמש בפונקציה הזאת, ותתן לה ערך שלילי.
  Reply With Quote
ישן 04-04-11, 13:38   # 7
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

CURRENT_TIMESTAMP מחזירה unixtime, שהוא כמובן בשניות, ולכן אולי עדיף לעבוד עם 60*60*24*7.
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 04-04-11, 18:56   # 8
gillllll
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
הודעות: 363

gillllll לא מחובר  

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

select * from articles as s where s.sendtime > DATEADD(day, -7, '2010-10-21 15:12:09')

שימוש ב dateadd עושה בעיות ומציג את אותה שגיאה ארורה.... שוב כנראה שאולי זה בגלל ש dateadd לא יודע לעבוד עם שדה מסוג timestamp או עם ערכי NULL בשדות שאמורים להחזיק DATE...
אני שוקל באמת להוסיף זמן ישן לכל הכתבות שיש בהן בתאריך NULL למרות שלא מתחשק לי כל כך למלא את הדטה בייס בזבל. וגם בגלל שהפונקציה between דווקא כן עושה משהו אני לא יודע בדיוק מה אבל לפחות היא לא מחזירה הודעת שגיאה.

בלו - ניסיתי לרשום את השאילתה עם המידע שלך לגבי השניות ואפילו סתם תקעתי מספר ארוך פעם אחרת - עדין זה מחזיר 0 רשומות .... ד"א היה חסר לך שם עוד כפול 60 כך שכמעט פספסתי את הפתרון המוזר שרשמתי עליו בהמשך בגלל זה
select * from articles as s where (s.sendtime between CURRENT_TIMESTAMP() and CURRENT_TIMESTAMP()-60*60*60*24*7)

עדכון:
אבל הפתרון נמצא
- ותודה לכולם כל אחד כאן תרם פיסות מידע שהובילו בסוף לפתרון דיי מוזר שככל הנראה נבע מה BETWEEN
מסתבר שלרשום כך עובד:
select * from articles as s where s.sendtime< CURRENT_TIMESTAMP() and s.sendtime>CURRENT_TIMESTAMP()-60*60*60*24*7

מוזר כבר אמרתי?
__________________
- חייך הכל לטובה .
  Reply With Quote
ישן 04-04-11, 21:15   # 9
BlueNosE
אין כמו ב127.0.0.1
 
BlueNosE's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: כפ"ס
גיל: 31
הודעות: 4,086

BlueNosE לא מחובר  

לא חסר, 60 שניות (דקה) כפול 60 דקות (שעה) כפול 24 שעות (יום) כפול 7 ימים (שבוע).

ומוזר, אבל אולי השימוש בפונקציה במבנה שיבש את הפעולה שלו איכשהו. לא אמור לקרות, בכל אופן.
__________________
עומר,
admin [@] rely.co.il

בניית אתרים Rely

סלנג מילון סלנג utter
  Reply With Quote
ישן 04-04-11, 21:23   # 10
gillllll
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
הודעות: 363

gillllll לא מחובר  

רגע עומר אתה צודק, שיט ...
אוקיי אז משום מה אם אני לא מכפיל בעוד 60 הוא לא מוצא רשומות (למרות שיש כתבות מהשבוע) אם אני מכפיל בעוד 60 זה כן מוצא רשומות - אולי זה סופר מילישניות? :\
__________________
- חייך הכל לטובה .
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


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

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