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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        dovidD ח 2 תגובות תגובה אחרונה
        0
        • 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
          • שואףש מנותק
            שואףש מנותק
            שואף
            השיב לdovid ב נערך לאחרונה על ידי
            #5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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