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

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

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

ניהול מודעות בSQL

מתוזמן נעוץ נעול הועבר תכנות
10 פוסטים 2 כותבים 199 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • E מנותק
    E מנותק
    eido
    כתב נערך לאחרונה על ידי
    #1

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

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

      אתה עושה טבלה נפרדת, ששמה יש מה הוא שמע, נניח נקרא לה ModhaToPhone, יש בה שלוש עמודות: ModhaId, Phone, At שזה מזהה מודעה, מזהה מאזין - מספר טלפון ותאריך.
      בשליפת הסינון אתה מחבר בין הטבלה של הדירות (מודעות) לטבלת הדירה_מאזין עם LEFT JOIN עם התניה שדירה_מאזין ריק, ככה:

      SELECT * FROM Modaot
      LEFT JOIN ModhaToPhone ON ModhaToPhone.ModhaId = Modaot.Id AND ModhaToPhone.Phone = '050xxxx'
      WHERE ModhaToPhone.ModhaId  IS NULL
      

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

      נוסח שונה לשליפה:

      SELECT * FROM Modaot
      WHERE NOT EXISTS(
          SELECT 1 FROM ModhaToPhone WHERE ModhaToPhone.ModhaId = Modaot.Id AND ModhaToPhone.Phone = '050xxxx'
      )
      

      כמובן שאחרי השליפה והשמעה יש להכניס לטבלת ההשמעות את המודעות.

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

        טוב, יש עוד פרט.
        אני צריך גם שיהיה סינון ולא כל ההודעות יושמעו, יש עוד טבלה שבה ההעדפוץ של כל אחד, לפי עיר/עיר+שכונה/עיר+שכונה+רחוב.
        איך משלבים את כל הסיפור הזה ביחד?
        יש לי קוד מושך את כל ההעדפות של המאזין

        SELECT * FROM ********** WHERE phone = ?
        

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

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

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

          בטח לשלב.
          שים AND עם התנאי שהראיתי, ובסגנון הראשון עליך להוסיף גם את הLEFT JOIN אחרי הFROM.

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

            ז"א שאני קודם עושה בקוד

            SELECT * FROM ********** WHERE phone = ?
            

            ואז לפי ההעדפות שקבלתי אני עושה AND, לדוגמא אם ההעדפות נשמרות בresult והם דירה בירושלים בשכונה X 4 חדרים ודירה בביתר עילית 3 חדרים אז אני עושה:

            SELECT *
            FROM Modaot
            WHERE NOT EXISTS (
                SELECT 1
                FROM ModhaToPhone
                WHERE ModhaToPhone.ModhaId = Modaot.Id
                  AND ModhaToPhone.Phone = ?
            )
            AND (
                   (Modaot.city = ? AND Modaot.region = ? AND Modaot.room = ?)
                OR (Modaot.city = ? AND Modaot.room = ?)
            )
            

            ?

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

              אפשר הכל בשאילתה אחת (אם כי מסיבות אפליקטיביות לפעמים יש עניין לפצל):

              SELECT *
              FROM Modaot
              CROSS JOIN (SELECT * FROM UserPreference WHERE phone =  ?) AS PR  --העדפות משתמש
              WHERE NOT EXISTS (
                  SELECT 1
                  FROM ModhaToPhone
                  WHERE ModhaToPhone.ModhaId = Modaot.Id
                    AND ModhaToPhone.Phone = ?
              )
              AND 
                     (Modaot.city = PR.city OR PR.city IS NULL) AND --סינון ישיר מול הערך של ההעדפה בטבלת ההעדפות
                     (Modaot.region = PR.region OR PR.region IS NULL) 
              
              
              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              תגובה 1 תגובה אחרונה
              1
              • E מנותק
                E מנותק
                eido
                כתב נערך לאחרונה על ידי
                #7

                הענין הוא שיכולות להיות כמה העדפות, כמו בדוגמא, דירה בירושלים 4 חדרים ובביתר 3 חדרים, זה שתי שורות שונות במסד נתונים.

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

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

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

                    זו הצעה של GPT

                    SELECT M.*
                    FROM Modaot M
                    WHERE NOT EXISTS (
                        SELECT 1
                        FROM ModhaToPhone MT
                        WHERE MT.ModhaId = M.Id
                          AND MT.Phone = ?
                    )
                    AND EXISTS (
                        SELECT 1
                        FROM UserPreference PR
                        WHERE PR.phone = ?
                          AND (M.city   = PR.city   OR PR.city   IS NULL)
                          AND (M.region = PR.region OR PR.region IS NULL)
                          AND (M.room   = PR.room   OR PR.room IS NULL)
                    )
                    

                    מה אומרים?

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

                      @eido נראה טוב.

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


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

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

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