עוד לא היה לי זמן אבל אני צריך להכין סרטון כדי להסביר על המימשק, בינתיים אעלה לכאן תמונה ואנסה להסביר:
מימשק התישאול הגלובלי.png
קודם כל יש לנו למעלה במרכז את החיפוש החופשי, כמו גוגל, זה מרכיב משפט SQL שעובר על כל השדות (בדילוג על שדות לא רלוונטיים כגון תאריך ושעה וכדומה) ומוצא את הביטוי.
מתחתיו במרכז יש לנו חיפוש לפי שדה, שם הלקוח מזין שם שדה, בוחר
שווה ל גדול מ קטן מ או
בין, ואז יש לו קומבו אחר שמציג לו את הערכים האפשריים לפי מה שיש בדטה בייס באותו שדה (עם רשומות ייחודיות כמובן) כאשר הוא בוחר את הערך נוצר משפט סלקט שבעצם בוחר רק את אותו ערך.
בתמונה אתם רואים את החיפוש האחרון שהיה (לפני ה
סכום שווה ל: 100) שזה היה לפי אופן שווה לשיק.
למעלה בצד שמאל יש "נושאים ופעולות" שם יש רשימה מוכנה שהמפתח הכין, והלקוח בוחר מתוכה בעצם סוג של שאילתה מוכנה (למשל "שנה לועזית נוכחית" במקום לבחור תאריך מ עד)
בצד ימין יש 3 אפשרויות שלושתם כבויות כרגע, וכאן בעצם מתחיל הכוח האדיר של הכלי הזה.
הסבר: בעיקרון כל חיפוש מבטל את החיפוש שקדם לו, כמו בגוגל כל חיפוש מתחיל מחדש.
אם אנחנו רוצים שהחיפוש שלנו יהיה "בתוך" הרשימה הנוכחית, כלומר לדגומא יש לנו כאן 207 רשומות (לפי אופן שיק וזה ממש לא משנה כרגע איך הגענו ל 207 הרשומות הללו) ואנו רוצים כעת לבצע חיפוש שהוא אך ורק בתוך אותם 207 רשומות, בוחרים בתיבת האפשרות
חיפוש בתוך הרשימה (זה לא עובד עם AND יש כאן גישה אחרת, נסביר בהמשך) ואז כל חיפוש שיתבצע מכאן ואילך (שימו לב!!! כל חיפוש!!! גם חיפוש חופשי וגם נושאים ופעולות וגם כל מה שתרצו גם עם מיליארד joinים) יתבצע אך ורק
בתוך הרשימהאם אנו רוצים
חיפוש מחוץ לרשימה זאת גם אפשרות, במקרה כזה כל חיפוש שנבצע יחול רק על רשומות שלא נמצאות כרגע בטבלה שלפנינו, הרשימה שישנה לפנינו תישאר בכל מקרה, והחיפוש רק "יוסיף" עליה רשומות (גם כאן זה לא עובד עם OR, סבלנות עד להמשך
) הואיל ואפשרות זו סותרת באופן לוגי את
חיפוש בתוך הרשימה לכן זאת תיבת רדיו של 2 אפשרויות.
מתחתם אנו יכולים לראות את תיבת הסימון חיפוש הפוך, הפעולה שלה היא פשוטה, מה שאתה מחפש זה מה שאתה לא מוצא, ומה שאתה מוצא זה בעצם כל הרשומות שעונות לתוצאה ההפוכה מהחיפוש שלך. הסברנו את העיקרון של חיפוש הפוך, אבל רגע! יש גם את 2 האופציות מעל, חיפוש בתוך או מחוץ לרשימה. ובכן, כן, זה יכול לעבוד ביחד, חיפוש הפוך בתוך הרשימה יתן תוצאות הפוכות רק בתוך הרשימה הקיימת ולא יחרוג ממנה, ואילו חיפוש הפוך מחוץ לרשימה, ישאיר את הרשימה הקיימת בכל מקרה, ואילו מחוצה לה, הוא יציג תוצאות ההפוכות לחיפוש.
למעלה בצד ימין אנו יכולים לראות חיצים ימינה ושמאלה, נשמע מוכר??? כן כן דפדפן אינטרנט, אתה יכול לדפדף לצעד הקודם שעשית בקלות על ידי לחיצה על החץ הימני ולהגיע לרשימה שהיתה לפני רגע, ולרשימה הבאה על ידי לחיצה על החץ השמאלי.
כעת מה קורה אם בן אדם יש לו 4 צעדים שהוא עושה נניח לפי אופן שווה לשיק, סכום גדול מ 100 תאריך שהוא בשבוע האחרון, ונפדה שווה ל "כן" (כמובן שמהצעד השני ואילך הוא כבר בוחר חיפוש בתוך הרשימה) הבן אדם כל יום נכנס לתוכנה בבוקר והוא רוצה לדעת מה עם הרשימה הזאת לפי התנאים הללו, האם נאלץ אותו בכל יום לשבור את השיניים מחדש? לא ולא! יש אפשרות "להקליט" את הצעדים, כמו הקלטת מאקרו בוורד, מכירים?? אז גם כאן, יש כפתור בצד השמאלי שמתחיל הקלטה, הוא בוחר שם להקלטה ["השיקים המעניינים של השבוע"], עושה את הצעדים, עוצר את ההקלטה, ואז יש לו סידרת צעדים מוכנה, כל מה שנשאר לו זה להריץ את ההקלטה. תשאלו אותי האם ההקלטה יודעת שהוא בחר בתוך הרשימה או מחוץ לרשימה וכדומה?? ממש כן....
נמשיך הלאה, מה קורה אם בן אדם יש לו הקלטה, ואחרי שהוא מריץ אותה הוא רוצה לחפש בתוך הרשימה משהו, אין שום בעיה, מריצים ההקלטה, ואז מחפשים בתוך הרשימה את מה שרוצים. ומה קורה אם מישהו רוצה לעשות הקלטה שתריץ הקלטה אחרת, ותחפש אחר כך מחוץ לרשימה הקלטה שלישית?? ובכן זה גם אפשרי. תשאלו ומה אם בתוך ההקלטות יש הגדרות של בתוך ומחוץ לרשימה האם זה מפריע?? ממש לא, כל הקלטה עושה את העבודה שלה בנפרד, ובסוף התוצאה היא, הקלטה א מורצת, והקלטה ב מחפשת את תוצאותיה מחוץ לרשימה שנוצרה לאחר הקלטה א.
כעת נשאל עוד משהו, מה קורה אם בן אדם רוצה את כל אלו שגרים בשכונה הר נוף בתנאי שנכנס מהם מעל 200 ש"ח ובשכונה רמות, גם אם תרמו מעל 100 ש"ח, איך עושים דבר כזה?? בעיקרון כדי להשיג 2 שכונות עושים חיפוש מחוץ לרשימה לשכונה השניה, אבל לגבי הסכומים אם נעשה מעל 100 הוא יציג גם את הר נוף מעל 100 ש"ח אז איך פותרים את זה?? כאן נכנסת לתמונה האופציה של שמירה בצד, אתה יכול לשמור קבוצת רשומות בצד, להמשיך לעבוד כאילו לא היה כלום, ולאחר מכן לצרף את קבוצת הרשומות הלזו לרשימה שלך. ואז עושים ככה, מחפשים הר נוף, בתוך הרשימה סכום שהוא בין 200 לבין 500. שומרים בצד, (אתם יכולים לראות החזר לרשימה 725 רשומות שמורות) עושים חיפוש חדש שכונת רמות, ובתוך הרשימה סכום גדול מ 100, מחזירים את הרשומות השמורות, ומקבלים תוצאה נהדרת!!! ההקלטות אגב, יודעות לנטר גם את זה.
שאלה נוספת, מה יהיה אם בן אדם רוצה כעת להתמקד בשכונת רמות, שבהם יש תורמים מעל 300 ש"ח אבל גם אלו המוגדרים "ידידים" גם אם לא תרמו כלום. הדרך הפשוטה לעשות זאת היא לעשות חיפוש תרומה מעל 300 ש"ח מחוץ לרשימה לפי קטגוריה ידידים, ואח"כ בתוך הרשימה שכונת רמות. אבל מה יהיה אם עשיתי 10 צעדים, הגעתי ל 207 רשומות, וכעת אני רוצה להתחיל לברור בתוך הרשימה שלי מספר אופציות, כלומר נניח שברשימה שהגעתי אליה בעמל רב לפי אלף פרמטרים, יש אנשים מהרבה שכונות, ואני רוצה להציג רק את האנשים של רמות הר נוף בני ברק מודיעין עילית או כאלו ששפת האם שלהם היא צרפתית. מה עושים עכשיו??? צריך לתכנן את הצעדים כל כך בקפידה שזה כבר מתחיל להיות מעמסה. או נניח שסתם ככה בן אדם יש לו עכשיו תוצאה הוא רוצה להשתולל בפנים, לעשות חיפושים חופשיים, לחזור לרשימה המקורית וכו'. כאן נכנס לתמונה המושג "נעיצה" מושג זה (אני לא יודע אם השם שלו הוא הכי מתאים אבל כעת בפרוייקט שלי מאוחר מידי כדי לשנות) אומר שמבחינת המימשק כעת כאילו יש בכל מסד הנתונים "רק" את הרשימה הזאת, וכל חיפוש שתעשה עכשיו (בתוך הרשימה מחוץ לרשימה, הפוך הכל הכל) לא יוכל לחרוג מהמסגרת הזאת. (ואגב... ההקלטה יודעת לנטר גם את הפעולה הזאת)
כעת מה יהיה אם בן אדם עשה חיפוש של 10 צעדים, ובדיוק את הרשימה שיצאה לו הוא רוצה להסתיר, כלומר הוא בעצם עשה 10 צעדים של חיפוש, שבסופו הוא רוצה את התוצאה ההפוכה?? בשביל זה יש אפשרות בתיבה המשולבת ב"נושאים ופעולות" שנקראת
הפוך רשימה פעולה פשוטה שהופכת את הרשימה (אם נניח יש במסד נתונים 1000 רשומות, התוצאה שלך הניבה 234, אז היא תניב את כל ה 766 הרשומות שלא נכללו קודם ותסתיר את הקודמת) אגב, כשמשתמשים בפונקציה הזאת בעת רשימה נעוצה, היא כמובן הופכת את הרשימה אבל בלי להציג רשומות שמחוץ לנעיצה.....
שימו לב בצד ימין למעלה יש תיבת סימון שנקראת "חיפוש חכם" כאשר היא נבחרת יש מנוע אימתני שמזהה את ההקלדה ומנסה לנתח אותה (למשל אם יש בפנים שמות של שדות הוא מפרק את זה לשדה וערך, או אם יש שמות של פונקציות, הוא אמור להתחקות אחרי הרגלי החיפוש של האיש הנוכחי ועוד היד נטויה לאלגוריתמים על אלגוריתמים שונים ומשונים שהמפתח יכול לתת ללקוח בקלות על ידי מימשק אינסופי זה)
כעת נניח שיש לנו 4 טבלאות, הכנסות, אנשי קשר, הוראות קבע, ופעילות. מה יהיה אם נרצה לראות את כל הפעילות של אלו שהיתה להם תרומה של 500 ש"ח ומעלה בשנה האחרונה. הרי הסכום של התרומה ניתן להשיג מטבלת הכנסות, ואילו הפעילות בטבלה אחרת, אז איך עושים join? בשביל זה אנחנו עושים צומת מרכזי ביותר בתוכנה, הצומת המרכזית היא אנשי קשר, כרגיל, כל טבלה יש לה שדה מקשר לאיש קשר. בדרך הזו אנחנו יכולים להגיע מכל טבלה לכל טבלה. כיצד? מפעילים את השאילתות בהכנסות, משם יש פונקציה בנושאים ופעולות שאומרת הצג את אנשי הקשר בטבלת אנשי קשר, ומאנשי קשר יש הפנייה לכל טבלה אחרת ברחבי התוכנה בהתבסס על ה join.
כעת אתם בטח מסוקרנים לגלות איך זה עובד, אשמח לשמוע רעיונות (רמז: מאוד פשוט ופרימיטיבי, אין כאן הרכבה של משפט SQL ארוך ומייגע)
ולאתגר את המנגנון עם דברים שהוא לא יכול לתת (למעט שאילתות המתבססות על סכומים שזמינות רק ע"י פיתוח של מפתח) לפי איך שזה נראה המימשק הזה מסוגל להכל. רק צריך לפתח אותו שיהיה גנרי וגלובלי, וזה אפשרי!!!
נ.ב. עדיין לא הוחלט על זה כקוד פתוח וכפרוייקט ציבורי חינמי!!! אנא לא להפיץ מחוץ לפורום, כרגע כל הזכויות שמורות....