-
לצורך הבנת העניין הפוסט ידבר על פלאפונים.
אני זקוק לצורך כלשהוא בעבודה למיין מול הלקוח איזה פלאפון מתאים לו.
התהליך צריך להיות שהוא בוחר צרכים בפלאפון (למשל מצלמה, ראם גבוה , אחסון גבוה , NFC וכו').
ולפי זה בסוף כשהוא לוחץ על מיין זה בודק מול השרת מה הפלאפון שעונה על כל הצרכים שלו ומדפיס לו את התוצאות.איך הדרך הנכונה לעשות את זה?
חשבתי על מסד נתונים שיש בו משהו כזה.
(דירוג מראש של כל המוצרים לפי דרגה למשל זיכרון של 8 ראם נחשב דרגה 2 בקטגוריה, ואילו זיכרון של 3\4 ראם יחשב כ4 כלומר הכי דפוק).
ואז כל סינון של שאלה נרשם בעוד מסד נתונים, על שם הלקוח למשל.
האם חשוב לך איכות התמונות?- מאוד חשוב לי
- אני מצלם פה ושם
- לא משתמש בכלל
נרשם בעצם במסד נתונים הדרגה שזה דחוף לו.
הגענו לשלב הסופי= סינון לפי מה שהלקוח צריך.
אני חשבתי לעשות סינון של פריט אחר פריט ולהוריד האם הוא טוב או לא, כלומר לשאוב מהמסד נתונים את כל הפריטים ולעשות השוואה מול כל נתון האם הוא גדול או שווה למה שהלקוח רצה. (למשל מול המצלמה הלקוח רצה מצלמה דרגה 2 - אם המוצר הוא מצלמה מספר 1 או 2 תמשיך לבדוק nfc אם לא תעבור למוצר הבא).
זה בעצם מצריך שתי לולאות ואני חושש שזה יקח הרבה זמן שהלקוח יצטרך להמתין (יש לי מעל 50 פריטים).עוד חשבתי לעשות שאת כל ההשוואה לשלוח למסד שיעשה את ההשוואה (משהו כמו זה-
SELECT * FROM prodact WHRE Camera=2
) .
אבל אני לא יודע אם אפשר לשרשר שם תנאים, כי מה שאני צריך זה .SELECT * FROM prodact WHRE Camera=2 or Camera<2 & nfc=v
וכו' ככה לשרשר הכל .
קיצור שאלתי היא,
- האם זאת הדרך הנכונה לאחסן את המידע.
- האם אחת משתי הדרכים לשלוף את המידע היא נכונה, אם כן מה מבינהם , אם לא מה הדרך הנכונה לשלוף?
-
@צבי-ש אני לא יודע בכלל SQL... אבל למה צריך לאכסן במסד את הנתון מה הלקוח בחר שחשוב? זה נתון שנצרך לאורך זמן?
בדוגמה שהבאת לא, זה משהו דינמי שהלקוח בוחר ולפי זה צריך להנפיק לו את הנתונים מהמסד של המכשירים (גם מסתמא הלקוח ירצה לבצע כמה בדיקות (=שאילתות) - איזה מכשיר הוא יקבל אם הוא יתפשר לדוגמה על איכות המצלמה, אולי זה יצא לו יותר זול ושוה לו להתפשר? או אולי להתפשר על משהו אחר? ככה שלשמור את ההעדפה שלו נראה לי ממש מיותר), והלקוח רואה את זה ומחליט מה שהוא רוצה (אם לדוגמה הוא מחליט להזמין את המכשיר המסוים, אפשר לשמור את הבחירה שלו, אבל לא רואה טעם לשמור את ההצעות שהוצעו לו)
או שאולי הדוגמה לא מספיק מייצגת את המקרה האמיתי? -
@צדיק-תמים אמר בסינון ערכים לפי בחירת לקוח| עזרה באיפיון:
@צבי-ש אני לא יודע בכלל SQL... אבל למה צריך לאכסן במסד את הנתון מה הלקוח בחר שחשוב? זה נתון שנצרך לאורך זמן?
בדוגמה שהבאת לא, זה משהו דינמי שהלקוח בוחר ולפי זה צריך להנפיק לו את הנתונים מהמסד של המכשירים (גם מסתמא הלקוח ירצה לבצע כמה בדיקות (=שאילתות) - איזה מכשיר הוא יקבל אם הוא יתפשר לדוגמה על איכות המצלמה, אולי זה יצא לו יותר זול ושוה לו להתפשר? או אולי להתפשר על משהו אחר? ככה שלשמור את ההעדפה שלו נראה לי ממש מיותר), והלקוח רואה את זה ומחליט מה שהוא רוצה (אם לדוגמה הוא מחליט להזמין את המכשיר המסוים, אפשר לשמור את הבחירה שלו, אבל לא רואה טעם לשמור את ההצעות שהוצעו לו)
או שאולי הדוגמה לא מספיק מייצגת את המקרה האמיתי?אני נצרך כדי לדעת מה בסוף הוא רצה ואז למיין.
מה הפתרון החילופי?
זה כמו קו טלפוני. אני לא יכול כל שלב למיין ולהביא לו 20 תוצאות , יכול להיות מקסימום 2-3 תוצאות.
אני חייב לשמור את ההקשות שלו , כי הוא לא חייב לגמור להזמין הרגע, הוא יכול גם לנתק ולהתקשר עוד שעה. -
@צבי-ש אם זה קו טלפוני זה אכן מסבך את העניין. כי באתר מקסימום יעשו כמה קליקים ויבחרו שוב... או שתשמור בלוקאל סטורג' וכדומה, מה שלא שייך בקו טלפוני
בקו טלפוני יש גם עוד יותר משמעות לזמן ההמתנה... אולי תעשה סינון מדורג? כלומר שקודם כל בוחרים לדוגמה ראם. המשתמש בחר 8 (או שבחר רמה, ואתה תתרגם את זה למספר) - הוא מסנן, ומוצא שיש 5 מכשירים זמינים עם 8 ראם. ואז הוא שואל איזה גודל מסך, וכן הלאה, כל פעם סינון נוסף עד שמגיעים לסכום מסוים של אפשרויות, שאז הוא יוכל לבחור מביניהן. -
@צדיק-תמים אמר בסינון ערכים לפי בחירת לקוח| עזרה באיפיון:
@צבי-ש אם זה קו טלפוני זה אכן מסבך את העניין. כי באתר מקסימום יעשו כמה קליקים ויבחרו שוב... או שתשמור בלוקאל סטורג' וכדומה, מה שלא שייך בקו טלפוני
בקו טלפוני יש גם עוד יותר משמעות לזמן ההמתנה... אולי תעשה סינון מדורג? כלומר שקודם כל בוחרים לדוגמה ראם. המשתמש בחר 8 (או שבחר רמה, ואתה תתרגם את זה למספר) - הוא מסנן, ומוצא שיש 5 מכשירים זמינים עם 8 ראם. ואז הוא שואל איזה גודל מסך, וכן הלאה, כל פעם סינון נוסף עד שמגיעים לסכום מסוים של אפשרויות, שאז הוא יוכל לבחור מביניהן.זה בדיוק מה שאני עושה,
שואל אותו שאלות ומסנן.השאלה שלי הייתה האם הדרך שכתבתי למעלה היא הדרך הנכונה לאחסן את זה,
וכן האם הדרך לסנן את המידע בפועל היא אחת מהדרכים שכתבתי או דרך שלישית שונה. -
@צבי-ש
אולי כדאי ליצור את המסד נתונים קצת אחרת-טבלה1 - ID פלאפון
טבלה2 - (שני השדות הראשונים הם מפתח משולב) תכונה, מספור, סוג ערך מתאים (הטקסט שיופיע)
טבלה 3 - (שלוש השדות הם מפתח משולב) ID פלאפון ( = מפתח זר של טבלה 1), תכונה, מספור ( = שני השדות מפתח זר של טבלה 2)
טבלה 4 - ID לקוח
טבלה 5 - (שלוש השדות הם מפתח משולב) ID לקוח ( = מפתח זר של טבלה 4) , תכונה, מספור ( = שני השדות מפתח זר של טבלה 2)וכעת ניתן בקלות להשיג את המידע.
(אני כותב את אלגוריתם השאילתה בעברית)שלב 1.
ליצור שאילתה לחיפוש ID פלאפון שוודאי לא תואם מחמת שלא עונה על אחת הדרישות:
(SELECT) לבחור את השדות ID פלאפון , ID לקוח
(FROM) להביא את טבלאות 2,4 (תכונה בטבלה 3 LEFT JOIN לתכונה בטבלה 5)
(WHERE) בתנאי ש: אם שדה מספור בטבלה 3 קטן מהמספור בטבלה 5 - או - אחת השדות בטבלה 5 ריקה (IS NULL)
לקנן או לשמור בשם את השאילתה הזו כ'לא מתאים'.שלב 2.
עכשיו ליצור שאילתה לחיפוש ID לקוח שכן מתאים:
לבחור את השדות ID פלאפון , ID לקוח
להביא את שאילתה לא מתאים ,טבלה 4 (טבלה 4 LEFT JOIN שאילתה לא מתאים)
בתנאי ש: אם שדה ID פלאפון בשאילתה לא מתאים ריק (IS NULL)נ.ב. טבלה 1 וטבלה 4 לא נצרכים לשאילתה, רק עוזר שלא תצטרך ליצור כל הזמן שאילתה מסוג SELECT DISTINCT וימהר את החיפוש כי יש כבר אינדקס.
-
למה בהתעסק בדאטה בייס ולא באקסל עם האופציות של סינון?
-
@lidormalich אמר בסינון ערכים לפי בחירת לקוח| עזרה באיפיון:
למה בהתעסק בדאטה בייס ולא באקסל עם האופציות של סינון?
כי למיטב ידיעתי אקסל נועד לאדם שעובר ידני על התוצאות
לא לרובוט שצריך להחזיר תשובות באופן אוטומטי -
@צבי-ש
א) ניתן וצריך לשרשר תנאים בSQL, לא עושים לולאות כי בSQL אמורים להיות יכולים לבטא בבת אחת בדיוק לאיזה תוצאה שואפים ב) אין צורך לשמור את פרמטרי השאילתה/בחירת הלקוח כפי שאמר @צדיק-תמים. ג) אפשר לבודק בבת אחת גודל מ/קטן מ יחד עם שווה ל ככה:SELECT * FROM prodact WHERE Camera >= 2...
האתגר שלך לתת ציון למוצר ו/או לתכונה של מוצר, ולתת לפי זה תוצאות הוא, הוא אתגר רציני. בהצלחה!
-