
הטקסט המלא של הדקות הראשונות בהרצאה «עדכון חלקי של מוצר ב-MySQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו כעת רוצים לעדכן מוצר באופן חלקי זאת אומרת הקליינט לא חייב לתת לנו את הכל הוא יכול לשלוח לנו מה שבא לו ID כמובן הוא חייב לתת לנו אבל אם הוא רוצה שייתן לי name אם הוא לא רוצה שלא ייתן אם הוא רוצה שייתן price אם הוא לא רוצה שלא ייתן בואו נשכפל את הפונקציה הזאת לפונקציה נוספת ונקרא לה update partial product קודם כל שלא נשכח בואו קודם כל נחצין אותה החוצה
מיד אחרי הפונקציה update full product ונלך לקונטרולר, נלך ל-patch, הנה הוא פה ואנחנו רוצים לקרוא ל-update partial product, פונקציה הזאת, שכמובן יש לנו כאן את המוצר, אובייקט מהמודל שבנינו, יש לו את ה-id, ה-id חייב להיות, ויש לו פה את ה-name,
פרייס וסטוק שהם לא חייבים להופיע אז אם אין לו את הניים פרייס וסטוק אחד מהם אנחנו לא רוצים לשלב את זה כביכול בשאילתה זאת אומרת שהשאילתה שלנו שאנחנו בונים כאן היא לא תמיד אותה שאילתה כי אני לא יכול לבוא ולהשאיר את השאילתה הזאת בצורה כזאת כי אם אני אומר לו תשמע update product set product name שווה לproduct.name אז אם יש לי name אז הוא יעודכן
ואם אין לי אז הוא יכתוב פה undefined ואז הוא ישפיע בדאטאבייס על המוצר ויאפס לו את השם ל-undefined. אז יש כל מיני טכניקות לפתור את הבעיה הזאת. בואו נראה טכניקה פשוטה שפשוט בניית שאילתת ה-SQL בהתאם למה שהגיע מהקליינט.
אז אנחנו רוצים 2, בואו נעשה את זה אמת כאן. const sql שווה. כאן אני רוצה ליצור מחרוזת רגילה ולבצע את הדבר הבא UpdateProductsSetRevah ואני לא יודע אם אני רוצה את החלק הזה כי רק אם בואו נייצר פה איזשהו if product.name שונה מ-undefined רק במצב הזה אני רוצה ללכת ל-SQL ולהוסיף את החלק שמתעסק עם.
product name שווה ולשרשר את החלק הזה, בואו נשרשר את זה לפה, כאן אני סוגר גרש ושם פסיק כי אולי יש לי גם עוד דבר שאני רוצה לשרשר, אם נשים פסיק בלי רווח זה קטע שהוא די חשוב.
לאחר מכן אני רוצה את אותו הדבר לבצע על פרייס, אם יוזר שלח לי פרייס אני רוצה לשרשר שגם ה-unit פרייס שווה לפרודקט נקודה פרייס ושוב פעם אם נשלח לי סטוק אני רוצה שהunits in stock יהיה שווה לסטוק פרודקט נקודה סטוק.
עכשיו יש לי פה סיטואציה שאני צריך לפתור כי בכל מקרה יש לי איזה שהוא פסיק מיותר כי אם נסתכל על השאילתה עצמה אחרי שיש לנו product name שווה לvalue שלו, unit price שווה, units in stock שווה, כמובן לא חובה שכולם יהיו, מגיע where, אנחנו לא רואים שיש פה פסיק בסוף, וכעת יהיה איזשהו פסיק,
כי אחד מהם לפחות שורשר עם איזשהו פסיק. אז כל מה שאנחנו רוצים לעשות זה להיפטר מהפסיק הזה. אז אם אנחנו רוצים להיפטר מהפסיק, קודם כל, דרך אגב, sql בכלל לא אמור להיות קונסט הוא אמור להיות let כי אנחנו משרשרים אליו אי אפשר לשרשר לקונסטים אז אנחנו רוצים לגשת לsql שלנו ולהכניס אליו את מה שהיה בו
סאב סטרינג סאב sdr ולהגיד לו תשמע קח את כל מה שהיה מההתחלה אבל עד הsql length פחות אחד זאת אומרת remove last תוריד את הפסיק האחרון שיש לנו פה כי אני לא יודע מי מהם שאושר אני לא יכול לדעת אם באמת יוניט פרייס שאושר אחרון אולי לא היה לי יוניט פרייס.
ואז רק הפרייס הוא אחרון ואני רוצה להיפטר מהפסיק הזה אולי היה לי רק name וסטוק ואני רוצה להיפטר מהפסיק הזה ואולי רק name ואני רוצה להיפטר מהפסיק הזה. אז ככה אני יודע שלא משנה מה קרה יש לי פסיק אחד בסוף שאני רוצה להעיף אותו.
אז אני בעצם מקצץ את המחרוזת מההתחלה ועד אחד לפני הסוף ומכניס את זה ל-SQL מחדש. אחרי שקיצצנו את הפסיק אנחנו רוצים לגשת ל-SQL ולשרשר גם את החלק של ה-Ware.
כמובן פה חשוב הרווח, כל הרווחים האלה זה חשוב כי אם אין לנו רווח אז אנחנו בעצם יכולים להיות צמודים מדי להגדרה הקודמת.
אגב, אני רואה עכשיו שאין לי צורך פה בגרש גרש. אני יכול להשאיר אותו, אבל אני אוהב להוריד כמה שיותר דברים. אם יש לי מספרים, אני לא צריך את זה.
אז בואו נשים פה רווח, ויש לנו where product ID מקבל את דולר, ויש לנו פה את product.id. הנה, יש לנו כאן את ההגדרה הזאת, וזהו, מפה אנחנו יכולים אפילו לקחת את שתי הפקודות האלה, קונטרול סי, להדביק, ואין לנו צורך בכל הקודים הקודמים.
אז מה אנחנו רואים כאן? כל הקוד הזה, מפה עד לפה, זה יצירת שאילתה דינמית. קצת מסורבל. תחשבו מה גם אם יש לכם 20 עמודות בדאטאבייס,