31-12-11, 20:09 | # 1 |
חבר מתקדם
|
שליפה מיידית מהמסד
אהלן ,
יש לי שאילתה INSERT פשוטה של הכנסת פוסט ואני רוצה לשלוף את אחד העמודות של הפוסט החדש הזה , אפשר לשלב את השאילתה של הINSERT עם שליפה כדי שלא יהיה מצב שיוכנס פוסט חדש בין השאילתות ואז השאילה של השליפה תשלוף את הפוסט הלא נכון? איזה עוד אפשרויות יש לי? תודה מראש , |
31-12-11, 20:20 | # 2 |
חבר בקהילה
|
תהפוך את המפתח שמייחד את הפוסט בתור Unique (בדר'כ ID).
וככה לא תוכל להכניס פעמיים אותו ערך. אבל עדיין השאלה שלך לא מובנת כלכך מקווה שזה מה שהתכוונת |
31-12-11, 20:39 | # 3 |
Fatal Error
|
אם תראה את העיצוב של המסד שלך אוכל לעזור אולי יותר.
כמה שיטות: 1. לייצור פרוצדורה של INSERT ו SELECT שתרוץ כמקשה אחת ברמת המסד 2. להשתמש בשדה מזהה כמו שהציעו מעלי במשפט INSERT SELECT אחד, אפשרי ב SQL SERVER וגם ב mySQL5. לא יודע לגבי גרסאות אחרות 3. לסגור אתה החיבור למסד מיד אחרי ה INSERT, לבצע SELECT ולשחרר את החיבור (פחות מומלץ) ואם הצלחתי להבין אותך נכון, אם הרגע הכנסת מידע כלשהו למסד, למה לשלוף אותו? חבל על הזמן.. תציג את הנתונים על המסך AS IS. ואם לא הבנתי נכון, אשמח להסבר נוסף..
__________________
eLad |
31-12-11, 22:08 | # 4 |
חבר מתקדם
|
יש לי טופס להוספת תוכן , במקרה הזה פוסט , אשכול או איך שתרצו לקרוא לזה
מה שקורא זה שהכנסתי למסד את הפרטים ואז אני רוצה לשלוח את המשתמש לעמוד צפייה בפוסט שהוא כתב אז אני צריך את ה id של הפוסט בשביל לשלוח אותו לפוסט שלו אז מה שאני צריך זה לשלוח את השאילתה של ההוספה של הפוסט ובאותו רגע ממש להוציא את ה id שהו קיבל אז השאלה שלי היא אם אפשר לשלוח את שני השאילתות האלה כאחד או שיטה אחרת כדי להימנע מלהעביר אותו לפוסט של מישהו אחר ששלח באותו הרגע ד"א העמודה של ה id עולה באחד בכל פוסט |
31-12-11, 22:42 | # 5 | |
חבר בקהילה
|
די פשוט , תבחר את הפוסט האחרון שנוסף למסד ע"י אותו משתמש.
ציטוט:
__________________
UI/UX Expert | WEB Developer | Mobile Apps Developer
- Netanel Edri, new approach to development - |
|
31-12-11, 23:42 | # 7 |
חבר בקהילה
|
אני מסכים שזה גם פתרון אפשרי אבל לא בדקתי את הנושא ומה שחשבתי עליו עכשיו איך last_insert_id מתמודד עם מקרה שבאותה שנייה מישהו אחר גם מעלה פוסט ? זה יכול ליצור לפותח האשכול בעיה במצבים כאלה.
__________________
UI/UX Expert | WEB Developer | Mobile Apps Developer
- Netanel Edri, new approach to development - |
31-12-11, 23:49 | # 8 |
עסק רשום [?]
|
last_insert_id מחזיר את ה- ID של הרשומה האחרונה שהוכנסה ע"י אותה התחברות (זאת אומרת שזה תקף לאותו סיישן בלבד).
לצורך העניין (אין שום סיבה שזה יקרה אבל כדי להבין את זה) אם הכנסת רשומה, התנתקת מהמסד ואז ביצעת התחברות מחדש זה כבר לא יעבוד. חשוב להריץ את זה ישר אחרי ה- INSERT שאתה רוצה לשלוף את ה- ID של הרשומה שנוצרה ממנו, אחרת אתה עלול לקבל תוצאות לא רצויות. |
31-12-11, 23:51 | # 9 |
חבר בקהילה
|
כמו שציינתי בתגובה שלי לא בדקתי את הנושא ולא ידעתי שזה מחזיר לאותו סיישן של ההתחברות הנוכחית , אם ככה הפתרונות של שנינו מתאימים.
__________________
UI/UX Expert | WEB Developer | Mobile Apps Developer
- Netanel Edri, new approach to development - Last edited by NetanelEdri; 01-01-12 at 00:55.. |
01-01-12, 01:00 | # 10 |
עסק רשום [?]
|
החסרונות בפתרון שהצעת הן שהוא פחות יעיל ופחות אמין מאשר last_insert_id, במידה ומדובר על אתר עמוס זה יכול להיות משמעותי.
במקום להשתמש ב- ORDER BY id DESC LIMIT 1 בד"כ עדיף לממש את זה עם- (SELECT MAX(id (באמצעות תכנון ואינדקסים מתאימים ניתן לקבל שיפור די משמעותי), את ה- WHERE רצוי להשאיר עבור האמינות של התוצאה אבל אסור להתעלם מהעובדה שזה דורש עבודה נוספת מהמנוע ובעצם צורך יותר משאבים וזמן שאפשר לחסוך. לעומת זאת אם נשתמש ב- last_insert_id - לדעתי זה יותר נוח ופשוט למימוש ומבחינת עובדות זה גם יותר בטוח ויותר יעיל, אין ספק שזאת בחירה טובה יותר ועדיף לבחור בה כשאפשר. הפתרון שהצעת יעבוד אין ספק שהוא "נכון" מהבחינה הזאת. הסיכוי שהוא יתן תוצאה לא נכונה גם ממש קלוש (ככה שלא נתייחס אליו יותר מדי), לעומת זאת מבחינת יעילות יש הבדל שיכול להיות משמעותי. אם מסיבה מסויימת לא ניתן להשתמש ב- last_insert_id, הפתרון שהצעת בשילוב הנקודות שציינתי כאן למעלה יהיה הפתרון הטוב ביותר הבא לדעתי (מבחינת יעילות). זה שלא הכרת זה בסדר גמור, אבל עכשיו כשאתה מכיר - בוא ניתן לו את הפתרון האידיאלי. עריכה: הניסוח של "מתאימים" יותר מתאים עכשיו, בכל מקרה בוא ניתן את הפתרון האידיאלי . Last edited by אדיר; 01-01-12 at 01:08.. |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|