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

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

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

שליפת נתונים מטבלה עם 3 טבלאות מקושרות

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

    לכל טבלה שמייצגת מודעה יש:
    טבלה של ערים - לפי הID של המודעה
    טבלה של נקרא/לא נקרא - לפי הID של המודעה - כאן חוזרות גם המודעות שנקרא וגם אלו שלא אלא שהן מחולקות לנקראו ולא נקראו
    טבלה של דירוג - לפי מספר הטלפון של המפרסם

    השאילתה אמורה להוסיף את כל הנתונים מכל הטבלאות

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

    השאלה איך נכון לעשות את זה.

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

    אבייא תגובה 1 תגובה אחרונה
    0
    • E eido

      לכל טבלה שמייצגת מודעה יש:
      טבלה של ערים - לפי הID של המודעה
      טבלה של נקרא/לא נקרא - לפי הID של המודעה - כאן חוזרות גם המודעות שנקרא וגם אלו שלא אלא שהן מחולקות לנקראו ולא נקראו
      טבלה של דירוג - לפי מספר הטלפון של המפרסם

      השאילתה אמורה להוסיף את כל הנתונים מכל הטבלאות

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

      השאלה איך נכון לעשות את זה.

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

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

      @eido הדילמה כאן היא קלאסית של סינון דינמי עם טבלאות מקושרות.

      הטעות הנפוצה היא שמשנים את ה-JOIN לפי הפרמטרים שנשלחים. בפועל ה-JOIN צריך להיות קבוע, והסינון צריך להתבצע רק ב-WHERE.

      כלל אצבע פשוט: JOIN משמש להבאת מידע, WHERE משמש לסינון מידע.

      לכן נכון לחבר תמיד את כל הטבלאות הרלוונטיות (בדרך כלל עם LEFT JOIN), ואז לכתוב את תנאי הסינון

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

      עוד משהו, אם יש טבלה שבה יש כמה רשומות לכל מודעה (למשל סטטוס נקרא/לא נקרא לפי מאזין), JOIN רגיל עלול לגרום לכפילויות של מודעות. במצבים כאלה עדיף לבצע את הסינון באמצעות EXISTS, תחפש על זה.

      ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
      הלינקיה שלי https://abaye.co/link.html

      E תגובה 1 תגובה אחרונה
      1
      • אבייא אביי

        @eido הדילמה כאן היא קלאסית של סינון דינמי עם טבלאות מקושרות.

        הטעות הנפוצה היא שמשנים את ה-JOIN לפי הפרמטרים שנשלחים. בפועל ה-JOIN צריך להיות קבוע, והסינון צריך להתבצע רק ב-WHERE.

        כלל אצבע פשוט: JOIN משמש להבאת מידע, WHERE משמש לסינון מידע.

        לכן נכון לחבר תמיד את כל הטבלאות הרלוונטיות (בדרך כלל עם LEFT JOIN), ואז לכתוב את תנאי הסינון

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

        עוד משהו, אם יש טבלה שבה יש כמה רשומות לכל מודעה (למשל סטטוס נקרא/לא נקרא לפי מאזין), JOIN רגיל עלול לגרום לכפילויות של מודעות. במצבים כאלה עדיף לבצע את הסינון באמצעות EXISTS, תחפש על זה.

        E מחובר
        E מחובר
        eido
        כתב נערך לאחרונה על ידי eido
        #3

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

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

        תגובה 1 תגובה אחרונה
        0
        תגובה
        • תגובה כנושא
        התחברו כדי לפרסם תגובה
        • מהישן לחדש
        • מהחדש לישן
        • הכי הרבה הצבעות


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

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

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