דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך עושים JOIN?

איך עושים JOIN?

מתוזמן נעוץ נעול הועבר תכנות
56 פוסטים 4 כותבים 755 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN מנותק
    nigunN מנותק
    nigun
    השיב לOdedDvir ב נערך לאחרונה על ידי
    #30

    @OdedDvir אמר באיך עושים JOIN?:

    מקרה שבו הDB כ"כ מזייף הוא משונה מאוד. ב99% מהמקרים הDB חכם מספיק לעשות את הסדר הכי טוב.

    מעניין לראות את תוכנית הריצה של השאילתא הארוכה. אם @nigun יוכל להראות אותה כאן (כמובן רק אם זה לא ידרוש שוב חצי שעה...)

    לא אכפת לי להעסיק את המכונה שלי לעוד חצי שעה (תופס סך הכל ליבה אחת)
    אבל אני לא יודע איך מציגים את התוכנית ריצה?

    מייל: nigun@duck.com

    OdedDvirO תגובה 1 תגובה אחרונה
    0
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      השיב לnigun ב נערך לאחרונה על ידי
      #31

      @nigun התחביר הוא:

      EXPLAIN ANALYZE <SQL>
      

      כלומר:

      EXPLAIN ANALYZE SELECT points.user, points.points FROM points JOIN info ON info.user=points.user
      
      nigunN תגובה 1 תגובה אחרונה
      3
      • nigunN מנותק
        nigunN מנותק
        nigun
        השיב לOdedDvir ב נערך לאחרונה על ידי
        #32

        @OdedDvir
        נראה שזה לא זמין בגירסת MYSQL שלי
        אז עשיתי EXPLAIN EXTENDED

        +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
        | id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra                                              |
        +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
        |  1 | SIMPLE      | userinfo | ALL  | NULL          | NULL | NULL    | NULL |  30410 |   100.00 | NULL                                               |
        |  1 | SIMPLE      | points   | ALL  | NULL          | NULL | NULL    | NULL | 359834 |   100.00 | Using where; Using join buffer (Block Nested Loop) |
        +----+-------------+----------+------+---------------+------+---------+------+--------+----------+----------------------------------------------------+
        
        

        מייל: nigun@duck.com

        OdedDvirO תגובה 1 תגובה אחרונה
        0
        • OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          השיב לnigun ב נערך לאחרונה על ידי
          #33

          @nigun איזו גירסא יש לך?

          nigunN תגובה 1 תגובה אחרונה
          0
          • nigunN מנותק
            nigunN מנותק
            nigun
            השיב לOdedDvir ב נערך לאחרונה על ידי
            #34

            @OdedDvir
            mysql 5.6.49

            מייל: nigun@duck.com

            תגובה 1 תגובה אחרונה
            0
            • dovidD מחובר
              dovidD מחובר
              dovid ניהול
              כתב ב נערך לאחרונה על ידי dovid
              #35

              @nigun הסתקרנתי פתאום יותר אז עליתי לראות את מבנה הנתונים.
              הוא לא היה קריא (ולכן עזבתי בפעמים הקודמות שביקרתי את הנושא, בלי לבדוק...)
              ערכתי את הודעתך ועיצבתי את הקוד.
              ובכן, השאלה שמייד עולה זה למה לעשות JOIN בין שני עמודות שאינם שדה מפתח. למה השדה user בpoints לא מצביע על הid של שבטבלה userinfo? (ואיך זה שאורכי השדות של הvarchar בשני שדות הuser לא זהים, זה לא כ"כ הגיוני).

              אגב גירסת הmysql: בכל אובנטו מתקינים בד"כ mysql כמו ילדים טובים מהמנהל חבילות ונתקעים עם הגירסה המיושנת 5 (אוחזים כעת ב12!!). לתשומת לבכם בהתקנת השרת הבאה שלכם. לגירסה 12 יש המון פיצ'רים שאין ב5.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              nigunN תגובה 1 תגובה אחרונה
              5
              • nigunN מנותק
                nigunN מנותק
                nigun
                השיב לdovid ב נערך לאחרונה על ידי
                #36

                @dovid
                לא תכננתי בהתחלה לעשות להם JOIN
                ויצרתי את הטבלות בזמנים שונים, לא זוכר למה ננתי ערכים שונים (כנראה אין סיבה מוצדקת).
                ובכלל הידע שלי במסדי נתונים דל מאוד (לצערי)
                ועד שאני לא נתקע אני לא שואל,
                אז אני אשאל עכשיו: מה זה שדה מפתח? ולמה הוא משמש?

                מייל: nigun@duck.com

                dovidD תגובה 1 תגובה אחרונה
                0
                • OdedDvirO מנותק
                  OdedDvirO מנותק
                  OdedDvir
                  כתב ב נערך לאחרונה על ידי OdedDvir
                  #37

                  @nigun ממש בראשי פרקים כדי לא לחרוג מהנושא של האשכול:
                  זה השדה שאמור לזהות את הרשומה. הוא תמיד ייחודי (ללא כפילויות בין הרשומות בטבלה) ובדרך מוסכמה הוא נקרא ID ולרוב הוא מסוג LongInt (יש גם מקרים יותר נדירים של שימוש ב GUID)

                  הוא השדה שאמור להיות המקשר הקלאסי בין טבלאות בשאילתות, כלומר שלרוב עליו מבצעים את ה-Join.

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

                  תגובה 1 תגובה אחרונה
                  5
                  • dovidD מחובר
                    dovidD מחובר
                    dovid ניהול
                    השיב לnigun ב נערך לאחרונה על ידי dovid
                    #38

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

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    nigunN תגובה 1 תגובה אחרונה
                    2
                    • nigunN מנותק
                      nigunN מנותק
                      nigun
                      השיב לdovid ב נערך לאחרונה על ידי nigun
                      #39

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

                      מייל: nigun@duck.com

                      dovidD תגובה 1 תגובה אחרונה
                      0
                      • dovidD מחובר
                        dovidD מחובר
                        dovid ניהול
                        השיב לnigun ב נערך לאחרונה על ידי dovid
                        #40

                        @nigun את ה"אם הבנתי נכון" ואת כלל ההנחות שלך, תשאיר לעונים.

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        nigunN תגובה 1 תגובה אחרונה
                        0
                        • nigunN מנותק
                          nigunN מנותק
                          nigun
                          השיב לdovid ב נערך לאחרונה על ידי nigun
                          #41

                          @dovid
                          שוב הסתבכתי😕 ?
                          בא נשאל אחרת
                          אני מבין ששדה מפתח זה שדה שאמור להכיל רק רשומות יחודיות
                          אז מה עושים כשצריך לעשות JOIN על שדות עם רשומות לא יחודיות?

                          מייל: nigun@duck.com

                          dovidD תגובה 1 תגובה אחרונה
                          0
                          • dovidD מחובר
                            dovidD מחובר
                            dovid ניהול
                            השיב לnigun ב נערך לאחרונה על ידי
                            #42

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

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            תגובה 1 תגובה אחרונה
                            3
                            • dovidD מחובר
                              dovidD מחובר
                              dovid ניהול
                              כתב ב נערך לאחרונה על ידי
                              #43

                              https://webmaster.org.il/articles/dbplaning/
                              https://support.microsoft.com/he-il/office/מבוא-לטבלאות-78ff21ea-2f76-4fb0-8af6-c318d1ee0ea7

                              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                              בכל נושא אפשר ליצור קשר dovid@tchumim.com

                              תגובה 1 תגובה אחרונה
                              0
                              • OdedDvirO מנותק
                                OdedDvirO מנותק
                                OdedDvir
                                כתב ב נערך לאחרונה על ידי
                                #44

                                @dovid אמר באיך עושים JOIN?:

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

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

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

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

                                שמא עבורם היה מספיק להפנות ישר אל הלינקים המצ"ב?
                                סליחה אם חרגתי...

                                nigunN dovidD 2 תגובות תגובה אחרונה
                                2
                                • nigunN מנותק
                                  nigunN מנותק
                                  nigun
                                  השיב לOdedDvir ב נערך לאחרונה על ידי nigun
                                  #45

                                  @OdedDvir
                                  אל תדאג
                                  אתה יכול לעקוב אחרי כל ההודעות של dovid
                                  הוא לא נותן כ"כ הרבה תוכחות
                                  וכשהוא נותן לי אני די זורם עם זה.

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

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

                                  מייל: nigun@duck.com

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD מחובר
                                    dovidD מחובר
                                    dovid ניהול
                                    השיב לOdedDvir ב נערך לאחרונה על ידי dovid
                                    #46

                                    @OdedDvir תום לב מזוהה מרחוק. ובמקרה כזה מבררים אם השואל איפה הוא הבין ואיפה לא ומגששים להבין מה מבנה הDB כמו שעשית וכו'.
                                    @nigun ידע היטב כמה הוא לא יודע, אלא "הניח" שהנושאים לא נדרשים/קשורים לשאלה.
                                    אני חושב שהשואל חייב להיות מנוטרל מ"הנחות". ואני אכן חריף, וכולם נותנים לי מוסר על כך, ואני מקבל באהבה, ובפרט ממך @OdedDvir. אבל אני יקבל ממכם את המוסר יותר כשתגיעו למקומי, כשתבינו כמה תסכול יש בעובדה שכל השאלה מונחת על "ההנחה" שהשמיטה מידע קריטי מגוף השאלה או יותר נכון מגוף השואל.

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    תגובה 1 תגובה אחרונה
                                    4
                                    • dovidD מחובר
                                      dovidD מחובר
                                      dovid ניהול
                                      כתב ב נערך לאחרונה על ידי
                                      #47

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

                                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                      תגובה 1 תגובה אחרונה
                                      2
                                      • dovidD מחובר
                                        dovidD מחובר
                                        dovid ניהול
                                        כתב ב נערך לאחרונה על ידי dovid
                                        #48

                                        בנוגע לרחמים על חדשים, היה את זה גם פה ברמז בהודעתו של @OdedDvir וגם באשכול של @יהודי-טוב (https://tchumim.com/topic/9086), התחושה שלכם היא שאני עלול להיות לא מספיק נעים/מזמין למי ששואל שאלות של מתחיל בתום לב.
                                        אני מזמין אתכם לאתר ולנתח מקרה כזה, של שאלה הוגנת בתום לב, שאני גרמתי לשואל ללכת.
                                        יש לרשותכם ארכיון של כמה שנים עם אלפי שאלות פה בפורום ובארכיון.

                                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                        OdedDvirO תגובה 1 תגובה אחרונה
                                        2
                                        • OdedDvirO מנותק
                                          OdedDvirO מנותק
                                          OdedDvir
                                          השיב לdovid ב נערך לאחרונה על ידי OdedDvir
                                          #49

                                          @dovid אמר:

                                          התחושה שלכם היא שאני עלול להיות לא מספיק נעים/מזמין למי ששואל שאלות של מתחיל בתום לב.

                                          ציינתי ש @nigun כבר בן בית פה, ואף הוא קיבל את הדברים ברוח טובה.

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

                                          יש לרשותכם כמה שנים עם אלפי שאלות פה בפורום ובארכיון.

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

                                          תגובה 1 תגובה אחרונה
                                          2

                                          • 1
                                          • 2
                                          • 3
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום