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

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

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

עמודת "תגיות", סינון כמה תגיות

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

    בסיס נתונים mysql , שרת nodejs, ספריה sequelize.
    יש לי טבלה שאני צריך בה עמודה אחת של תגיות
    ותיהיה לי אפשרות לסנן שורות על פי תגיות, אבל יכולים להיות לי בסינון מספר תגיות.
    לדוגמא, יש לי תגיות: "פסח", "מצה", "מרור", "סוכות", "סוכה", "לולב"...
    אני רוצה ליצור שאילתה שתוכל לשלוף לי את כל השורות שיש להם את אחת מהתוויות: "פסח"/"סוכה".
    מה הדרך הנכונה לשמור בטבלה (סוג text (לכאורה מופרד בפסיקים) או json (עם מערך)).
    ואיך לבצע את השאילתה נכון?
    אני חושב שניתן לעשות סינון של

    teg like '%סוכה%' OR tag like '%פסח%'
    

    אבל נראה לי שזה יעשה בעיות לתגיות כדוגמת אם יש תג נפרד לולב ונפרד לולבים
    תודה

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

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

      teg like '%,סוכה,%' OR tag like '%,פסח,%'
      

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

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

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

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

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

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

          @dovid כתב בעמודת "תגיות", סינון כמה תגיות:

          שליפה לפי JOIN

          לא ברור לי מה אני שומר בטבלת הנתונים עצמה.
          איך אני משייך שורה לתוויות.
          אולי אתה מתכוין לטבלה שלישית המכילה מזהה שורה ומזהה תווית?
          ואז שליפת כל התוויות עם join לטבלה המקשרת ואז join אל התוצאות עצמן?

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

            @חוקר אני כעת רואה שיש לMYSQL פונקציה מיוחדת שבודקת אם איבר נמצא ברשימה מופסקת בפסיקים:

            WHERE FIND_IN_SET('סוכה', `TAGS`)
            

            מקור: גוגל comma separated list mysql ואז https://stackoverflow.com/q/2674011/1271037

            אבל לעדכון אין משהו מובנה..
            בכל מקרה זה גרוע מכמה כיוונים וזה אנטי-נירמול.

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

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

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

              @dovid
              לא הגבת האם כוונתך לטבלה שלישית או משהו אחר

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

                @חוקר כתב בעמודת "תגיות", סינון כמה תגיות:

                לא ברור לי מה אני שומר בטבלת הנתונים עצמה.

                הייתה לך טבלה אחת, שהכילה ישויות שאין לי מושג מה מהותם.
                רצית בשדה אחד בטבלה זו לאחסן רשימת תגיות מופרדת בפסיקים.
                ואני הצעתי לך להוסיף טבלה אחת, ויש בה שני עמודות בלבד: מזהה זר של הטבלה הנ"ל, ושם התגית.
                שליפה מותנית אתה עושה עם JOIN בין שני הטבלאות וWHERE על התגית.
                שליפה רגילה עם כל התגיות הרלוונטיות אתה יכול עם JOIN רגיל ואז יש לך שורות לקבץ בקליינט, או GROUP BY ובשביל לקחת את כל התגיות להשתמש עם GROUP_CONCAT שמייצר לך רשימה מופרדת בפסיקים לקליינט. אפשרות שלישית זה לשמור תמיד עותק של הרשימה בעמודת טקסט בטבלה הראשונה רק בשביל לחסוך את הבעיה הזו.

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

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

                nigunN תגובה 1 תגובה אחרונה
                2
                • nigunN מנותק
                  nigunN מנותק
                  nigun
                  השיב לdovid ב נערך לאחרונה על ידי
                  #8

                  @dovid
                  יש יתרון בביצועים אם מוסיפים טבלה שלישית עם שמות התגיות
                  ואז משייכים לכל רשומה ID של תגית במקום את הטקסט של התגית?

                  מייל: nigun@duck.com

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

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

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

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

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

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

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

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