הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   שאלה בSQL (https://hosts.co.il/forums/showthread.php?t=71089)

Megnum 13-01-09 00:05

שאלה בSQL
 
שלום, נגיד יש לי את השאילתה הזאת:
PHP קוד:

$sql="select * from table where `id`=1 order by id"

איך אוכל לשלב את הפקודה delete
בשאילתה וכמובן לקבוע את הid שימחק.


כמובן שאשמח לעשות זאת בלי לעשות תשאילתה מחדש
תודה רבה!

null 13-01-09 07:19

עד כמה שידוע לי, אין אפשרות לשלב אין SELECT וDELETE,
שכן ל DELETE יש הגדרת WHERE משל עצמו.

SELECT נועד על מנת לקבל נתונים לפי קריטריון מסויים
ו DELETE נועד על מנת למחוק רשומות לפי קריטריון מסויים

אני לא מבין איפה קיימת הבעיתיות בלשלוח עוד שאילתה למסד למחיקה...?

vadimg88 13-01-09 09:26

זה נקרא sub queries
לדוגמא:

קוד:

DELETE FROM <tablename> WHERE id = (SELECT id from <tablename> WHERE id ='1')

En-Solutions 13-01-09 09:40

הDELETE חייב לבוא לפני הSELECT אם אתה רוצה לעשות תת שאילתה כמו במקרה של ודים.
בכל מקרה התת שאילתה כאן מיותרת אם אתה משתמש באותה טבלא.
Delete from "TABLE" Where ID=IDNUMBER
ימחק את כל השורה של המספר שציינת בID.

בהצלחה :)

A.M.F 13-01-09 10:34

למה זה טוב שימוש בשאילתות כאלה?

vadimg88 13-01-09 10:52

אכן, אם ה ID ידוע כבר לא צריך לבצע שאילתה כדי לשלוף את ה ID אבל אם לדוגמא יש לך את השם של המשתמש ואתה רוצה למחוק את הנתונים שלו מטבלה אחרת (או מאותה טבלה לפי ID) אז אתה מבצע שאילתת SELECT בתוך ה DELETE כפי שמוצג מעלה.

למה זה טוב? דבר ראשון זה מונע ממך לבצע כמה שאילתות כל פעם אחת אחרת. אפשר היה לעשות שאילתה של SELECT שמחזירה את ה ID ואז עם ה ערך של ה ID לבצע שאילתת DELETE נוספת. זה יגרום לביצוע של 2 שאילתות (שזה מיותר מבחינת אופטימיזציה) לעומת ביצוע שאילתה אחת שמבצעת שאילתה נוספת פנימית. בדרך כלל MYSQL מריץ את השאילתה הזאת בתור שאילתה אחת ולא מחלק אותה לכמה שאליתות, (בניגוד ל joins ו ו unions ).
עוד דבר שלפעמים נותן יתרון זה ש sub queries (תתי שאילתות) כתובות בצורה קריאה יותר מאשר ה JOINS ו UNIONS למיניהם.


כל הזמנים הם GMT +2. הזמן כעת הוא 13:24.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ