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

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

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

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

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

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

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

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

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

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

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

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

      dovidD 2 תגובות תגובה אחרונה
      1
      • ח חוקר

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

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

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

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

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

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

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

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

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

          שליפה לפי JOIN

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

          dovidD תגובה 1 תגובה אחרונה
          0
          • ח חוקר

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

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

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

            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
            • dovidD dovid

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

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

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

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

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

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

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

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

                שליפה לפי JOIN

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

                dovidD מחובר
                dovidD מחובר
                dovid
                ניהול
                כתב ב נערך לאחרונה על ידי
                #7

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

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

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

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

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

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

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

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

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

                  מייל: nigun@duck.com

                  dovidD תגובה 1 תגובה אחרונה
                  2
                  • nigunN nigun

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

                    dovidD מחובר
                    dovidD מחובר
                    dovid
                    ניהול
                    כתב ב נערך לאחרונה על ידי
                    #9

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

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


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

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

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