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

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

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

מתוזמן נעוץ נעול הועבר תכנות
7 פוסטים 4 כותבים 59 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • שואףש מנותק
    שואףש מנותק
    שואף
    כתב ב נערך לאחרונה על ידי
    #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
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

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

  • התחברו או הירשמו כדי לחפש.