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

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

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

מסד נתונים כטבלא בשני ממדים

מתוזמן נעוץ נעול הועבר תכנות
17 פוסטים 7 כותבים 366 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO מחובר
    OdedDvirO מחובר
    OdedDvir
    השיב לשואף ב נערך לאחרונה על ידי
    #7

    @שואף אתה בעצם מבקש ליצור טבלת ציר. לא ידוע לי שיש פונקציית PIVOT ב-MySQL, לכן צריך להתחכם ולשרשר כמה משפטי CASE ברצף.
    כדי לקבל את שם העמודה בכל פעם, יש ליצור את נוסח המשפט באופן דינמי עבור כל ערך, ואז להשתמש ב GROUP_CONCAT:

    SET @sql = NULL;
    SELECT
    GROUP_CONCAT(DISTINCT CONCAT(
      'SUM(CASE WHEN name = "', name, '" THEN price ELSE 0 END)  AS ', name)
    )
    INTO @sql
    FROM AZMANOT;
     
    SET @sql = CONCAT('SELECT monthYear, ', @sql, ' FROM AZMANOT GROUP BY monthYear');
    
    SELECT @sql;
     
    PREPARE t FROM @sql;
    EXECUTE t;
    DEALLOCATE PREPARE t;
    
    תגובה 1 תגובה אחרונה
    5
    • OdedDvirO מחובר
      OdedDvirO מחובר
      OdedDvir
      השיב לdovid ב נערך לאחרונה על ידי
      #8

      @dovid אמר במסד נתונים כטבלא בשני ממדים:

      אין לי מושג למה @OdedDvir על הדרך שיפר את זה עבור MSSQL

      צודק, בראש הקודח שלי תקוע ש-CASE עדיף מ-IF, (אאל"ט בגלל שהוא תומך ב Short-Circuting), אבל כאן זה לכאורה לא משנה, ואפשר לכתוב גם כך:

      SUM(IF(name = 'REOUVEN', price, 0)) AS REOUVEN,
      ...
      
      תגובה 1 תגובה אחרונה
      3
      • שואףש מנותק
        שואףש מנותק
        שואף
        כתב ב נערך לאחרונה על ידי
        #9

        @OdedDvir תודה רבה מאוד! ישבתי ללמוד את השאילתא שלך, יש בה כמה אלמנטים שלא הכרתי.
        תרשה לי לשאול כמה שאלות.
        א. למה השורה הראשונה? ענין של תקינות?

        SET @sql = NULL;
        

        ב. למה כתבת בשורה הרביעית ELSE 0 ? מה היה חסר בלי זה?

        ג. שורה 11 כתבת SELECT @sql; כנ"ל זה היה נחוץ, או רק בשביל הדיבגינג?

        שוב תודה.

        ליצירת קשר: admin@i-call.me

        הידד! גישה למייל גם בלי מחשב ואינטרנט!

        OdedDvirO dovidD 2 תגובות תגובה אחרונה
        1
        • OdedDvirO מחובר
          OdedDvirO מחובר
          OdedDvir
          השיב לשואף ב נערך לאחרונה על ידי OdedDvir
          #10

          @שואף הכל לא מעכב בכלל.
          א. הרגל (מגונה?) אני לא סומך על ערך ברירת מחדל.
          ב. פשוט הרגל, אחרת CASE מחזירה NULL. אכן זה לא בעיה בפונקציה של SUM, אבל ב-COUNT השורה לא תיכלל בספירה אם הערך NULL, זה לא תמיד רצוי.
          ג. מיותר.

          תגובה 1 תגובה אחרונה
          1
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            השיב לשואף ב נערך לאחרונה על ידי dovid
            #11

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

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

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

            שואףש תגובה 1 תגובה אחרונה
            4
            • שואףש מנותק
              שואףש מנותק
              שואף
              השיב לdovid ב נערך לאחרונה על ידי
              #12

              @dovid אמר במסד נתונים כטבלא בשני ממדים:

              הכל נחוץ!

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

              ליצירת קשר: admin@i-call.me

              הידד! גישה למייל גם בלי מחשב ואינטרנט!

              OdedDvirO תגובה 1 תגובה אחרונה
              1
              • OdedDvirO מחובר
                OdedDvirO מחובר
                OdedDvir
                השיב לשואף ב נערך לאחרונה על ידי
                #13

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

                זה הדברים הקטנים האלו בתכנות שעלולים לגרום בעיות גדולות בהמשך.
                דוגמא משעשעת לכך היא הטעות שהשתרבבה לגוגל באחד העדכונים ל ChromeOS, וגרמה לאלפי משתמשים להנעל מחוץ לחשבון שלהם.
                הטעות היתה בהשמטת תו אחד בודד בבדיקה של סיסמת המשתמש בתנאי if, בו בטעות השתמשו באופרטור הבינארי & במקום באופרטור הלוגי &&.
                דהיינו כתבו:

                if (key_data_.has_value() & !key_data_->label().empty()) {
                

                במקום

                if (key_data_.has_value() && !key_data_->label().empty()) {
                

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

                צדיק תמיםצ תגובה 1 תגובה אחרונה
                7
                • צדיק תמיםצ מנותק
                  צדיק תמיםצ מנותק
                  צדיק תמים
                  השיב לOdedDvir ב נערך לאחרונה על ידי
                  #14

                  @OdedDvir על זה נאמר: ככל שרמת החוּמרה של הבאג גבוהה יותר, כך הסיבה שגרמה לבאג מטופשת יותר...

                  Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                  טיפים

                  תגובה 1 תגובה אחרונה
                  2
                  • אפר שריפהא מנותק
                    אפר שריפהא מנותק
                    אפר שריפה
                    השיב לשואף ב נערך לאחרונה על ידי
                    #15

                    @שואף נראה לי שזה הרבה יותר רלוונטי אליך
                    https://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server

                    שואףש Y.Excel.AccessY 2 תגובות תגובה אחרונה
                    1
                    • שואףש מנותק
                      שואףש מנותק
                      שואף
                      השיב לאפר שריפה ב נערך לאחרונה על ידי
                      #16

                      @אפר-שריפה תודה. אבל זה לא מתייחס לMYSQL.

                      ליצירת קשר: admin@i-call.me

                      הידד! גישה למייל גם בלי מחשב ואינטרנט!

                      תגובה 1 תגובה אחרונה
                      1
                      • Y.Excel.AccessY מנותק
                        Y.Excel.AccessY מנותק
                        Y.Excel.Access
                        השיב לאפר שריפה ב נערך לאחרונה על ידי Y.Excel.Access
                        #17

                        @אפר-שריפה אמר במסד נתונים כטבלא בשני ממדים:

                        @שואף נראה לי שזה הרבה יותר רלוונטי אליך
                        https://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server

                        אולי התכוונת לזה - https://stackoverflow.com/questions/7674786/how-can-i-return-pivot-table-output-in-mysql

                        יש שם כמה פתרונות...

                        Y.Excel.Access @ gmail.com

                        תגובה 1 תגובה אחרונה
                        1
                        • dovidD dovid העביר נושא זה מ-תכנות ב-

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

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

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