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

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

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

הפורום כעת לקריאה בלבד, לקריאה נוספת.

איך עושים JOIN?

מתוזמן נעוץ נעול הועבר תכנות
56 פוסטים 4 כותבים 1.8k צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN nigun

    @yossiz
    הוא שוב נתקע
    יכול להיות בגלל שזו טבלה גדולה?
    עריכה: בטבלת points יש 371574 שורות
    בטבלת info יש 29542 שורות.

    OdedDvirO
    OdedDvirO
    OdedDvir
    כתב ב נערך לאחרונה על ידי
    #4

    @nigun מה סוג הנתונים של user?

    nigunN תגובה 1 תגובה אחרונה
    0
    • OdedDvirO OdedDvir

      @nigun מה סוג הנתונים של user?

      nigunN
      nigunN
      nigun
      כתב ב נערך לאחרונה על ידי dovid
      #5

      @OdedDvir

      
      CREATE TABLE  `userinfo` (
          `id` INT(10) NOT NULL AUTO_INCREMENT,
          `grup` INT(11) NULL DEFAULT NULL,
          `user` VARCHAR(14) NULL DEFAULT NULL,
          `nameText`  TEXT NULL DEFAULT NULL,
          `note` TEXT NULL DEFAULT NULL,
          PRIMARY KEY (`id`)
      
      CREATE TABLE  `points` (
          `id` INT(10) NOT NULL AUTO_INCREMENT,
          `grup` INT(11) NULL DEFAULT NULL,
          `user` VARCHAR(20) NULL DEFAULT NULL,
          `questionId` INT(11) NULL DEFAULT NULL,
          `points` INT(11) NULL DEFAULT NULL,
          `time` INT(64) NULL DEFAULT NULL,
          `answerId` INT(11) NULL DEFAULT NULL,
          PRIMARY KEY (`id`))
      
      

      מייל: nigun@duck.com

      OdedDvirO תגובה 1 תגובה אחרונה
      0
      • nigunN nigun

        @OdedDvir

        
        CREATE TABLE  `userinfo` (
            `id` INT(10) NOT NULL AUTO_INCREMENT,
            `grup` INT(11) NULL DEFAULT NULL,
            `user` VARCHAR(14) NULL DEFAULT NULL,
            `nameText`  TEXT NULL DEFAULT NULL,
            `note` TEXT NULL DEFAULT NULL,
            PRIMARY KEY (`id`)
        
        CREATE TABLE  `points` (
            `id` INT(10) NOT NULL AUTO_INCREMENT,
            `grup` INT(11) NULL DEFAULT NULL,
            `user` VARCHAR(20) NULL DEFAULT NULL,
            `questionId` INT(11) NULL DEFAULT NULL,
            `points` INT(11) NULL DEFAULT NULL,
            `time` INT(64) NULL DEFAULT NULL,
            `answerId` INT(11) NULL DEFAULT NULL,
            PRIMARY KEY (`id`))
        
        
        OdedDvirO
        OdedDvirO
        OdedDvir
        כתב ב נערך לאחרונה על ידי OdedDvir
        #6

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

        SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
        

        בטבלת points יש 371574 שורות
        בטבלת info יש 29542 שורות.

        לפי הנתונים, מספר הרשומות האפשריות בJoin הוא 371K * 29K = 10,759,000,000!
        לפי סדר הריצה כנראה הDB מבצע JOIN ואח"כ מסנן.
        אם אתה צריך רק קבוצה מסויימת, תסנן את שתי הטבלאות לפני הJOIN

        עריכה: בהתבוננות שניה, עדיין לא הבנתי מדוע אתה מבצע JOIN אך לא מציג כלום מטבלת userinfo

        nigunN 2 תגובות תגובה אחרונה
        1
        • OdedDvirO OdedDvir

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

          SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
          

          בטבלת points יש 371574 שורות
          בטבלת info יש 29542 שורות.

          לפי הנתונים, מספר הרשומות האפשריות בJoin הוא 371K * 29K = 10,759,000,000!
          לפי סדר הריצה כנראה הDB מבצע JOIN ואח"כ מסנן.
          אם אתה צריך רק קבוצה מסויימת, תסנן את שתי הטבלאות לפני הJOIN

          עריכה: בהתבוננות שניה, עדיין לא הבנתי מדוע אתה מבצע JOIN אך לא מציג כלום מטבלת userinfo

          nigunN
          nigunN
          nigun
          כתב ב נערך לאחרונה על ידי
          #7

          @OdedDvir
          א. בMYSQL לא עובד TOP
          אז השתמשתי בLIMIT.
          וזה אכן עבד.
          ב. הורדתי את הלימיט והשאילתא עבדה
          מה ההבדל בין השאילתות?

          מייל: nigun@duck.com

          OdedDvirO תגובה 1 תגובה אחרונה
          0
          • nigunN nigun

            @OdedDvir
            א. בMYSQL לא עובד TOP
            אז השתמשתי בLIMIT.
            וזה אכן עבד.
            ב. הורדתי את הלימיט והשאילתא עבדה
            מה ההבדל בין השאילתות?

            OdedDvirO
            OdedDvirO
            OdedDvir
            כתב ב נערך לאחרונה על ידי
            #8

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

            מה ההבדל בין השאילתות?

            לא הבנתי למה כוונתך

            nigunN תגובה 1 תגובה אחרונה
            0
            • OdedDvirO OdedDvir

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

              מה ההבדל בין השאילתות?

              לא הבנתי למה כוונתך

              nigunN
              nigunN
              nigun
              כתב ב נערך לאחרונה על ידי
              #9

              @OdedDvir
              מה ההבדל בין

              SELECpoints.user ,points.points FROM points JOIN info ON info.user=points.user
              

              לבין

              SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
              

              מייל: nigun@duck.com

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • OdedDvirO OdedDvir

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

                SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
                

                בטבלת points יש 371574 שורות
                בטבלת info יש 29542 שורות.

                לפי הנתונים, מספר הרשומות האפשריות בJoin הוא 371K * 29K = 10,759,000,000!
                לפי סדר הריצה כנראה הDB מבצע JOIN ואח"כ מסנן.
                אם אתה צריך רק קבוצה מסויימת, תסנן את שתי הטבלאות לפני הJOIN

                עריכה: בהתבוננות שניה, עדיין לא הבנתי מדוע אתה מבצע JOIN אך לא מציג כלום מטבלת userinfo

                nigunN
                nigunN
                nigun
                כתב ב נערך לאחרונה על ידי
                #10

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

                עריכה: בהתבוננות שניה, עדיין לא הבנתי מדוע אתה מבצע JOIN אך לא מציג כלום מטבלת userinfo

                שניה, פעם ראשונה שאני עושה JOIN
                אני עדיין מנסה להבין איך זה עובד?

                מייל: nigun@duck.com

                תגובה 1 תגובה אחרונה
                0
                • nigunN
                  nigunN
                  nigun
                  כתב ב נערך לאחרונה על ידי
                  #11

                  יופי עכשיו השאילתא:

                   SELECT P.user, P.points,I.nameText FROM (SELECT * FROM points ) AS P JOIN (SELECT * FROM userinfo ) AS I ON P.user=I.user and P.grup=123;
                  

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

                  מייל: nigun@duck.com

                  תגובה 1 תגובה אחרונה
                  0
                  • nigunN nigun

                    @OdedDvir
                    מה ההבדל בין

                    SELECpoints.user ,points.points FROM points JOIN info ON info.user=points.user
                    

                    לבין

                    SELECT P.user, P.points FROM (SELECT TOP 1000 * FROM points) AS P JOIN (SELECT TOP 1000 * FROM userinfo) AS I ON P.user=I.user ;
                    
                    OdedDvirO
                    OdedDvirO
                    OdedDvir
                    כתב ב נערך לאחרונה על ידי OdedDvir
                    #12

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

                    מה ההבדל בין ...

                    לכאורה אין הבדל:

                    SELECT points.user, points.points FROM points JOIN info ON info.user=points.user 
                    

                    לבין (אם נוריד את ה TOP\LIMIT)

                    SELECT points.user, points.points FROM points JOIN userinfo ON points.user=userinfo.user;
                    

                    אינני יודע, אך אולי ב MYSQL הסדר של ה ON משנה וצריך לרשום:

                    ON points.user=info.user 
                    

                    ולא

                    ON info.user=points.user
                    
                    nigunN תגובה 1 תגובה אחרונה
                    0
                    • OdedDvirO OdedDvir

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

                      מה ההבדל בין ...

                      לכאורה אין הבדל:

                      SELECT points.user, points.points FROM points JOIN info ON info.user=points.user 
                      

                      לבין (אם נוריד את ה TOP\LIMIT)

                      SELECT points.user, points.points FROM points JOIN userinfo ON points.user=userinfo.user;
                      

                      אינני יודע, אך אולי ב MYSQL הסדר של ה ON משנה וצריך לרשום:

                      ON points.user=info.user 
                      

                      ולא

                      ON info.user=points.user
                      
                      nigunN
                      nigunN
                      nigun
                      כתב ב נערך לאחרונה על ידי nigun
                      #13

                      @OdedDvir
                      בשניהם זה נתקע.
                      אולי אני ישאיר את זה לחצי שעה
                      ונראה מתי זה מצליח להביא את התוצאות בסוף.

                      מייל: nigun@duck.com

                      OdedDvirO nigunN 2 תגובות תגובה אחרונה
                      0
                      • nigunN nigun

                        @OdedDvir
                        בשניהם זה נתקע.
                        אולי אני ישאיר את זה לחצי שעה
                        ונראה מתי זה מצליח להביא את התוצאות בסוף.

                        OdedDvirO
                        OdedDvirO
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי OdedDvir
                        #14

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

                        אולי אני ישאיר את זה לחצי שעה

                        אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

                        SELECT P.user, P.points,I.nameText
                        FROM (SELECT * FROM points WHERE points.grup=123) AS P
                        JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
                        ON P.user=I.user; 
                        
                        nigunN תגובה 1 תגובה אחרונה
                        2
                        • nigunN nigun

                          @OdedDvir
                          בשניהם זה נתקע.
                          אולי אני ישאיר את זה לחצי שעה
                          ונראה מתי זה מצליח להביא את התוצאות בסוף.

                          nigunN
                          nigunN
                          nigun
                          כתב ב נערך לאחרונה על ידי
                          #15

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

                          @OdedDvir
                          בשניהם זה נתקע.
                          אולי אני ישאיר את זה לחצי שעה
                          ונראה מתי זה מצליח להביא את התוצאות בסוף.

                          בדקתי עכשיו
                          ואני רואה שהבקשה ארכה 31 דקות!!!!
                          מעניין מה ההבדל?

                          מייל: nigun@duck.com

                          OdedDvirO תגובה 1 תגובה אחרונה
                          0
                          • OdedDvirO OdedDvir

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

                            אולי אני ישאיר את זה לחצי שעה

                            אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

                            SELECT P.user, P.points,I.nameText
                            FROM (SELECT * FROM points WHERE points.grup=123) AS P
                            JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
                            ON P.user=I.user; 
                            
                            nigunN
                            nigunN
                            nigun
                            כתב ב נערך לאחרונה על ידי
                            #16

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

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

                            אולי אני ישאיר את זה לחצי שעה

                            אני עדיין מציע לך לבצע סינון WHERE לפי הקבוצה לפני הJOIN, ולהרוויח את הזמן הזה:

                            SELECT P.user, P.points,I.nameText
                            FROM (SELECT * FROM points WHERE points.grup=123) AS P
                            JOIN (SELECT * FROM userinfo WHERE userinfo.grup=123) AS I
                            ON P.user=I.user; 
                            

                            יפה
                            עכשיו זה ירד ל0.23 שניות.

                            מייל: nigun@duck.com

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

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

                              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                              nigunN תגובה 1 תגובה אחרונה
                              1
                              • dovidD dovid

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

                                nigunN
                                nigunN
                                nigun
                                כתב ב נערך לאחרונה על ידי
                                #18

                                @dovid
                                אז מה השתבש אצלי?

                                מייל: nigun@duck.com

                                dovidD תגובה 1 תגובה אחרונה
                                0
                                • nigunN nigun

                                  @dovid
                                  אז מה השתבש אצלי?

                                  dovidD
                                  dovidD
                                  dovid
                                  ניהול
                                  כתב ב נערך לאחרונה על ידי
                                  #19

                                  @nigun זה מה שאני שואל את עצמי לאורך כל האשכול.

                                  • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                                  • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                                  תגובה 1 תגובה אחרונה
                                  1
                                  • nigunN nigun

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

                                    @OdedDvir
                                    בשניהם זה נתקע.
                                    אולי אני ישאיר את זה לחצי שעה
                                    ונראה מתי זה מצליח להביא את התוצאות בסוף.

                                    בדקתי עכשיו
                                    ואני רואה שהבקשה ארכה 31 דקות!!!!
                                    מעניין מה ההבדל?

                                    OdedDvirO
                                    OdedDvirO
                                    OdedDvir
                                    כתב ב נערך לאחרונה על ידי
                                    #20

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

                                    מעניין מה ההבדל?

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

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

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

                                    אולי עדיף לא להשאיר את הדבר בידיים של הDB איפה שאפשר בקלות לקבוע את הסדר כדלעיל?

                                    dovidD תגובה 1 תגובה אחרונה
                                    1
                                    • nigunN
                                      nigunN
                                      nigun
                                      כתב ב נערך לאחרונה על ידי
                                      #21

                                      בהמשך לשאלה הנ"ל
                                      לפעמים יש משתמשים שלא רשומים ב userinfo
                                      אבל אני בכל זאת אני רוצה לקבל את הרשומה שלהם בpoints
                                      איך אני כותב את השאילתא?

                                      מייל: nigun@duck.com

                                      OdedDvirO תגובה 1 תגובה אחרונה
                                      0
                                      • nigunN nigun

                                        בהמשך לשאלה הנ"ל
                                        לפעמים יש משתמשים שלא רשומים ב userinfo
                                        אבל אני בכל זאת אני רוצה לקבל את הרשומה שלהם בpoints
                                        איך אני כותב את השאילתא?

                                        OdedDvirO
                                        OdedDvirO
                                        OdedDvir
                                        כתב ב נערך לאחרונה על ידי
                                        #22

                                        @nigun בעיקרון אתה כותב LEFT JOIN במקום JOIN

                                        dovidD תגובה 1 תגובה אחרונה
                                        2
                                        • OdedDvirO OdedDvir

                                          @nigun בעיקרון אתה כותב LEFT JOIN במקום JOIN

                                          dovidD
                                          dovidD
                                          dovid
                                          ניהול
                                          כתב ב נערך לאחרונה על ידי dovid
                                          #23

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

                                          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                                          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                                          תגובה 1 תגובה אחרונה
                                          4

                                          שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

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

                                          בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

                                          הרשמה התחברות
                                          תגובה
                                          • תגובה כנושא
                                          התחברו כדי לפרסם תגובה
                                          • מהישן לחדש
                                          • מהחדש לישן
                                          • הכי הרבה הצבעות


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

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