ABA


"שאילתת SQL,אני לא מצליח לעשות שאילתה מסויימת."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #13093 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 13093
Yaadm1986

   18:36   20.03.06   
אל הפורום  
  שאילתת SQL,אני לא מצליח לעשות שאילתה מסויימת.  
 
   ככה,
יש לי מסד נתונים שיש בו את הנתון (תאריך)
שהוא מסודר כך:

2/24/2006
שנה/יום/חודש

עכשיו אני רוצה לעשות חיפוש לפי חודש .

אז אני צריך שאילתה שתבחר רק את שני התווים הראשונים.

נגיד ואני רוצה לעשות חיפוש רק על חודש 11.

אז איך השאילתה שלי צריכה להיראות ?

אני לא יכול לעשות :

LIKE %2%

לדוגמא כי זה ימצא לי את כל התאריכים שיש בהם 2.

אם יש למישהו פיתרון אני מאוד אשמח, אני רק מתלמד .

תודה רבה והמשך גלישה נעימה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אתה יכול לחפש על: Ice Cold  20.03.06 20:41 1
  תוכל להשוות לחודש המדויק Bomfunk MC's 20.03.06 21:01 2
     אני לא מכיר את הפונקציה, זה ב SQL ? אפשר דוגמא ? Yaadm1986 21.03.06 07:11 3
         לא מומלץ להשתמש בפונקציות כגון month ו-substr Ice Cold  21.03.06 14:13 5
             זה לא נכון ... אופירוש 21.03.06 20:01 6
                 אללה אופירוש.. תראה לו מי הבוס MO 21.03.06 20:19 7
                     חלילה ... אין פה בוסים ... כולנו פה ע''מ לעזור . אופירוש 22.03.06 20:38 10
                 טוב, אז ככה..... Ice Cold  22.03.06 10:49 8
                     ... אופירוש 22.03.06 20:35 9
  מכתב דני15  21.03.06 12:32 4

       
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   20:41   20.03.06   
אל הפורום  
  1. אתה יכול לחפש על:  
בתגובה להודעה מספר 0
 

LIKE '2/%'

בגלל שאין אחוז בהתחלה, זה אומר מה שמתחיל ב-2 ויש אחריו /, ואז כל מה שבא.

זה יחזיר לך את מה שאתה רוצה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Bomfunk MC's
חבר מתאריך 1.7.02
123 הודעות
   21:01   20.03.06   
אל הפורום  
  2. תוכל להשוות לחודש המדויק  
בתגובה להודעה מספר 0
 
   בעזרת הפונקציה month שתוציא לך את החודש מכל תאריך.
month(date)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yaadm1986

   07:11   21.03.06   
אל הפורום  
  3. אני לא מכיר את הפונקציה, זה ב SQL ? אפשר דוגמא ?  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   14:13   21.03.06   
אל הפורום  
  5. לא מומלץ להשתמש בפונקציות כגון month ו-substr  
בתגובה להודעה מספר 3
 
אלא אם כן זהו DATABASE מאוד קטן, כי הפעלת הפונקציה על 100,000 רשומות למשל, תכביד על ה-DATABASE. שימוש ב-LIKE בלי תחילית כ-% עדיין משתמשת באינדקסים שהוגדרו, ככה שאין שינוי ממשי במהירות התגובה.

אם השנה היתה קבועה, היה אפשר לחפש עם BETWEEN.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
אופירוש

   20:01   21.03.06   
אל הפורום  
  6. זה לא נכון ...  
בתגובה להודעה מספר 5
 
   ערכתי לאחרונה בתאריך 21.03.06 בשעה 20:02 בברכה, אופירוש
 
אין שום בעיה להשתמש בפונקציות האלו , ואפילו מומלץ מפני שהם כתובות הרבה יותר יעיל ממה שתוכניתן ממוצע יכול לכתוב ותמיד עדיף עיבוד מסוג זה שיתבצע ב - DB .

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

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

ואגב , אינדקסים מבוססי מחרוזת ממש אין באקסס ... ורוב ה - DB's הקטנים בינוניים ... זה נכנס ב - Oracle רק בגרסה 9i ועדיין יש להם בעיות ביצועים עם הנושא ... אז ממש לא הייתי בונה על זה ... (חוץ מיזה שאני מניח שהבחור פה לא יודע להגדיר אינדקסים ... במיוחד לא מבוססי מחרוזת אז אתה סתם זורק דברים לאויר העיקר לכתוב משהו ...)

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

ערב טוב .


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MO

   20:19   21.03.06   
אל הפורום  
  7. אללה אופירוש.. תראה לו מי הבוס  
בתגובה להודעה מספר 6
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
אופירוש

   20:38   22.03.06   
אל הפורום  
  10. חלילה ... אין פה בוסים ... כולנו פה ע''מ לעזור .  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   10:49   22.03.06   
אל הפורום  
  8. טוב, אז ככה.....  
בתגובה להודעה מספר 6
 
קודם כל, נכון, אין לי מושג על איזה DATABASE הוא עובד, אבל להניח שהוא עובד על MDB זה גם לא נכון.

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

ואם מדובר ב-MYSQL, אז בכלללל יש הרבה מאוד משמעות. אני לא יודע אם אתה מכיר MYSQL או לא, אבל תסכים איתי ששליפה לפי DATE_ADD יותר כבדה משליפה רגילה, ויש עוד המווווון דוגמאות.

ד"א, אני עובד כרגע ב-IMESH, עם מאגרים של מליוני רשומות ב-MYSQL(!), ואין לנו שום בעיות מהירות פה, בעיקר בשל היכולת לבנות אינדקסים משולשים (על 3 שדות בו זמנית), אינדקסים שמבטלים בכלל שימוש ב-FILESORT וב-WHERE CLAUSE. תנסה פעם למיין טבלה גדולה ולהריץ עליה EXPLAIN PLAN, גם ב-ORACLE, ותראה בדיוק איך זה משפיע. בטווח הארוך, שימוש בפונקציות מתמטיות פשוט יגרעו מהיעילות, מפני שפשוט אין INDEX על פעולות מתמטיות.

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

ד"א, "זורק מילים באוויר העיקר לרשום משהו" ? לא ממש נחמד מצידך...

יום נ-פ-ל-א.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
אופירוש

   20:35   22.03.06   
אל הפורום  
  9. ...  
בתגובה להודעה מספר 8
 
   אני לא רוצה לספר לך על אינדקסים מבוססי מחרוזת ב - Oracle 8.1 ...
הם פועלים כמו ש - RAC של Oracle פעל בגרסה Oracle 8.1 ... (שזה לא כל כך טוב ...)

אני לא הולך לתאר לך את המערכת שלי (לצערי אני לא יכול) , אבל תתאר לעצמך מערכת בסדר גודל של כ - 600 שנות אדם (וממשיכים לספור).

וממש ממש ממש ... לא הייתי מעיז להשוות DB (תרשה לי להגיד מעפן) MYSql חינמי ומעפן ל - Oracle ...
אני מניח שאתה לא מכיר יותר מידי Oracle , אבל תאמין לי שלא סתם הוא ה - DB הכי טוב בעולם מאז ומעולם שרץ על Windows ו - Unix (ל - MainFrame יש פתרונות אחרים) .

במיוחד שיש לנו חוות שרתים שעובדים ב - RAC עם Oracle 10g... אז כנראה שאתה לא יודע באמת מה זה עומס נתונים ...

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

שליפה כמו שאני דיברתי עליה (כתבתי "לא שטוחה") , ז"א היררכית/SubSelect/Joins/Unions וכו ... באמת תעשה בעיות ביצועים "אפילו" ב - Oracle .

ושליפות שאני מדבר עליהם , אני מבטיח לך שלא רק שהם לא ירוצו בזמן סביר , אלא שהם בכלל לא ירוצו ולא יתמכו ע"י שפת SQL ב - MySQL. ז"א שהם בלתי ניתנות למימוש ב - MYSQL .

אני מציע לך לקרוא על ה - Optimizer של Oracle ותבין שמאחורי DB לא עומדים רק Index-ים . בגלל זה רישיון ותמיכה ל - DB עולה יותר ממיליון דולר ... משהו שאפילו מיקרוסופט הגדולה לא מצליחה להתמודד איתו בעזרת ה - SQL Server.

ובאמת היה לי יום נפלא , תודה.

הולך לראות Prison Break... מציע גם לכם.
לילה טוב.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
דני15 
חבר מתאריך 3.8.02
47437 הודעות, 8 פידבק
   12:32   21.03.06   
אל הפורום  
  4. מכתב  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 21.03.06 בשעה 12:33 בברכה, דני15
 
יש את הפונקציה substr שיכולה להעתיק חלק ממחרוזת. לא נראה לי שזה יכול להיכנס למשפט SQL שלך, אז תשלוף את הכל, תעביר את התאריך למחרוזת, ובהדפסה תבדוק את התנאי הזה. אולי יש דרך יותר יעילה שאני לא מכיר, אבל זה מה שעולה לי כרגע.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net