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

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

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

מציאת שורה שניה בMYSQL

מתוזמן נעוץ נעול הועבר תכנות
7 פוסטים 4 כותבים 113 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • שואףש מנותק
    שואףש מנותק
    שואף
    כתב ב נערך לאחרונה על ידי
    #1

    יש לי טבלה גדולה, עם שלש עמודות (חוץ מID)
    מספר טלפון, סכום, ותאריך
    רשום שם כל התשלומים שלקוחות שלי שילמו.
    אני צריך למצוא את התשלום השני של הלקוחות, זאת אומרת לצמצם את הרשימה לתשלום השני שכל לקוח ביצע.
    על לקוח אחד הייתי עושה date DESC LIMIT 1, 1
    אבל אני מחפש דרך לעשות את זה על כל הלקוחות.
    יש רעיון, או צריך לתשאל על כל לקוח בנפרד עם PHP?
    תודה

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

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

    yossizY תגובה 1 תגובה אחרונה
    0
    • שואףש שואף

      יש לי טבלה גדולה, עם שלש עמודות (חוץ מID)
      מספר טלפון, סכום, ותאריך
      רשום שם כל התשלומים שלקוחות שלי שילמו.
      אני צריך למצוא את התשלום השני של הלקוחות, זאת אומרת לצמצם את הרשימה לתשלום השני שכל לקוח ביצע.
      על לקוח אחד הייתי עושה date DESC LIMIT 1, 1
      אבל אני מחפש דרך לעשות את זה על כל הלקוחות.
      יש רעיון, או צריך לתשאל על כל לקוח בנפרד עם PHP?
      תודה

      yossizY מנותק
      yossizY מנותק
      yossiz
      כתב ב נערך לאחרונה על ידי
      #2

      @שואף שאלות ממשפחה זו הם כל כך נפוצות שעשו ב-stackoverflow תגית מיוחד עבורם
      https://stackoverflow.com/questions/tagged/greatest-n-per-group

      חלק מהפתרונות לא יעזרו במקרה שלך שלא מדובר בראשון אלא בשני

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      שואףש תגובה 1 תגובה אחרונה
      3
      • yossizY yossiz

        @שואף שאלות ממשפחה זו הם כל כך נפוצות שעשו ב-stackoverflow תגית מיוחד עבורם
        https://stackoverflow.com/questions/tagged/greatest-n-per-group

        חלק מהפתרונות לא יעזרו במקרה שלך שלא מדובר בראשון אלא בשני

        שואףש מנותק
        שואףש מנותק
        שואף
        כתב ב נערך לאחרונה על ידי
        #3

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

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

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

        dovidD ח 2 תגובות תגובה אחרונה
        0
        • שואףש שואף

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

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

          הפתרון הפרימטיבי שעולה לי בראש:
          צריך לעשות שאילתה אחת שמחזירה את השורה הראשונה, כלומר הID המינימלי פר שורה:

          SELECT MIN(payment_id)
          FROM PaymentsTable
          

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

          SELECT MIN(payment_id) AS SECOND_PAY
          FROM PaymentsTable
          LEFT JOIN (SELECT MIN(payment_id) AS FIRST_ID
                              FROM PaymentsTable) AS NEG_FIRST_ROWS
          WHERE NEG_FIRST_ROWS.FIRST_ID IS NULL
          

          אז יש לנו פה את כל השניות.
          שלב הבא זה JOIN בין השאילתה הזאת לטבלת התשלומים:

          SELECT Persons.*, Payments.* 
          FROM Persons 
          LEFT JOIN Payments  ON Persons.ID = Payments.person_id
          INNER JOIN   (  SELECT  MIN(payment_id) AS SECOND_PAY_ID
                                     FROM PaymentsTable
                                     LEFT JOIN (SELECT MIN(payment_id) AS FIRST_ID
                                                         FROM PaymentsTable) AS NEG_FIRST_ROWS
                                     WHERE NEG_FIRST_ROWS.FIRST_ID IS NULL) AS FILTER_SECONDS
          ON Payments.payment_id = FILTER_SECONDS.SECOND_PAY_ID
          

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

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

            הפתרון הפרימטיבי שעולה לי בראש:
            צריך לעשות שאילתה אחת שמחזירה את השורה הראשונה, כלומר הID המינימלי פר שורה:

            SELECT MIN(payment_id)
            FROM PaymentsTable
            

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

            SELECT MIN(payment_id) AS SECOND_PAY
            FROM PaymentsTable
            LEFT JOIN (SELECT MIN(payment_id) AS FIRST_ID
                                FROM PaymentsTable) AS NEG_FIRST_ROWS
            WHERE NEG_FIRST_ROWS.FIRST_ID IS NULL
            

            אז יש לנו פה את כל השניות.
            שלב הבא זה JOIN בין השאילתה הזאת לטבלת התשלומים:

            SELECT Persons.*, Payments.* 
            FROM Persons 
            LEFT JOIN Payments  ON Persons.ID = Payments.person_id
            INNER JOIN   (  SELECT  MIN(payment_id) AS SECOND_PAY_ID
                                       FROM PaymentsTable
                                       LEFT JOIN (SELECT MIN(payment_id) AS FIRST_ID
                                                           FROM PaymentsTable) AS NEG_FIRST_ROWS
                                       WHERE NEG_FIRST_ROWS.FIRST_ID IS NULL) AS FILTER_SECONDS
            ON Payments.payment_id = FILTER_SECONDS.SECOND_PAY_ID
            

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

            שואףש מנותק
            שואףש מנותק
            שואף
            כתב ב נערך לאחרונה על ידי
            #5

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

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

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

            dovidD תגובה 1 תגובה אחרונה
            0
            • שואףש שואף

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

              ח מנותק
              ח מנותק
              חוקר
              כתב ב נערך לאחרונה על ידי
              #6

              @שואף אמר במציאת שורה שניה בMYSQL:

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

              אני שדרגתי על שרת פעיל וב"ה לא היו בעיות.
              לקח כחמש דקות של השבתה..
              https://tchumim.com/post/105902
              אבל לא מנסים על הפעיל, אלא עשיתי תמונת מערכת, ויצרתי שרת חדש, עליו ניסיתי, וכמה וכמה פעמים נכשל, עד שהגעתי לדרך הנכון, ואז נכנסתי לחומת האש של אמזון, עצרתי את פורט 80 ו443 וכו' שלא יהיו תעבורה נכנסת לביצוע שינויים, וכמובן עשיתי גיבוי סופי נוסף, ואז ביצעצי את העדכון לקח כמה דקות ושחררתי את התכבורה הנכנסת.
              הפונקציות החדשות בגרסה 8 באים בהחלט לשימוש.

              תגובה 1 תגובה אחרונה
              3
              • שואףש שואף

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

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

                @שואף אמר במציאת שורה שניה בMYSQL:

                @dovid חשבתי לעשות משהו מסובך בסגנון כזה.
                השאלה אם לא עדיף כבר לעשות את זה ישירות בPHP.

                זה עושה בדיוק את אותו דבר.
                אתה גם לא אמרת בכלל למה אתה צריך ומה אתה צריך,
                כי יכול להיות שאפשר לעשות משהו פשוט בהרבה.
                זרקת שאלה זרקתי לך תשובה. האם בPHP יותר טוב? לא, פחות טוב.

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


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

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

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