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

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

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

ספירת כמות רשומות למספר רשומות קיבוץ

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

    יש לי טבלת folders המכילה מידע אודות תיקיות
    לכל רשומה יש שדה folder_id (לדוגמא 1234), המכיל מזהה ייחודי, ובנוסף folder_tree המציין את נתיב התיקיה החל מתיקית השורש (לדוגמא \123\1234)
    אני מעוניין לשלוף בשאילתה את כמות התיקיות משנה שיש מתחת לכל תיקיה. מה שאומר ששורה אחת יכולה להיספר ב count של כמה רשומות
    כרגע אני משתמש עם שאילתה כבדה יחסית, אני שולף בשאילתת משנה את כל טבלת התיקיות כפול עצמה, עם פילטר שיציג רק רשומות שה folder_id מופיע בשדה folder_tree ואז סוכם

    זוהי השאילתה:

    select folder_id, count(*) count_sub_folders from 
    (SELECT folders.folder_id,folders.folder_tree FROM folders,folders as folders2 where folders2.folder_tree like concat('%',folders.folder_id,'%'))
    folders3
    group by folder_id
    

    זוהי הטבלה:
    0e3b434b-30a1-46c1-8e85-740efd7a7785-image.png
    וזה השאילתה שאני מעוניין להציג:
    c485846d-2a98-408a-8215-f9dc165b1430-image.png
    (הכמות כוללת את התיקיה עצמה)

    השאלה אם יש דרך למטב את השאילתה, בשני אפשרויות: או כתיבה אחרת של השליפה, או כתיבה אחרת של טבלת folders

    yossizY תגובה 1 תגובה אחרונה
    1
    • מומחה באקססמ מומחה באקסס התייחס לנושא זה ב
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב למומחה באקסס ב נערך לאחרונה על ידי yossiz
      #2

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

      1. זה לא נכון להשתמש ב-'%LIKE '%XXX כי אין דרך להשתמש באינדקס עבור שאילתה כזו
        במקרה שלך יש אפשרות פשוטה להימנע מזה, פשוט תשתמש בנתיב המלא של התקייה במקום ה-id שלו
        where folders2.folder_tree like concat(folders.folder_tree,'%')
        זה מאפשר להשתמש באינדקס כי ה-wildcard רק לבסוף
      2. יש פה בזבוז משאבים: הסיכום של כל תיקייה בנוייה מהסיכום של כל התיקייות שמתחתיו, יוצא שיש חישוב חוזר ונשנה של אותו מידע (יש לזה פתרון עם recursive cte או משהו כזה, אני לא בקי, רק זורק משהו מהזכרון, יש הרבה כתבות ברשת על איך לנהל מידע בצורת עץ במסד SQL-י)

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

        @yossiz
        זו לא ממש השאילתה בה אני משתמש, אבל בדוגמא הזו הדגמתי את הבעיתיות שבפרוייקט שלי

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

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

        yossizY תגובה 1 תגובה אחרונה
        0
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב למומחה באקסס ב נערך לאחרונה על ידי yossiz
          #4

          @מומחה-באקסס כתב בספירת כמות רשומות למספר רשומות קיבוץ:

          זו לא ממש השאילתה בה אני משתמש

          אם יש שינוי משמעותי, תביא אותו אחרת לא נוכל לדון ביחד כאשר חלק מהשאלה עלומה

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

          נראה לי שזה מיותר ולא יעזור פה, המידע כבר קיים בצורה די מיטבית (לפחות לצורך השאילתה שהבאת, ב-SQL SERVER יש DATATYPE מיוחד לצורך זה, אבל ב-MYSQL אין משהו אחר)

          הפתרון אמור להיות recursive cte אאל"ט (עדיין התעצלתי מלבדוק)

          עריכה:
          הנה כמה תוצאות חיפוש:

          • החיפוש: https://www.google.com/search?q=sql+tree+data+get+all+nodes+beneath
          • https://stackoverflow.com/questions/16956929

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

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

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

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