הרשם | שאלות ותשובות | רשימת חברים | לוח שנה | הודעות מהיום | חיפוש |
|
|
כלים לאשכול | תצורת הצגה |
01-12-09, 12:48 | # 1 |
חבר בקהילה
|
שאלת SQL: ניקוי טבלה מרשומות כפולות
אהלן,
צריך עזרה בשאילתא (סדרת שאילתות) נכונה לניקוי טבלה מרשומות כפולות. מה יש - 1. טבלת רשומות הכוללות את השדות "זיהוי משתמש" ו-"מספר רשימה" (יש רק משתמש יחידני ומספר רשימות שהוא יכול להיות רשום בהן). 2. קיים רישום של אותו "זיהוי משתמש" בכמה כניסות בטבלה ל-"מספרי רשימות" לא רצויים". מה צריך - לזהות את הרישומים הכפולים ולנקות אותם. אין לי בעיה להגדיר שמספר הרשימה למחיקה יהיה "10" לדוגמא. תודה מראש.
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית |
01-12-09, 16:59 | # 2 |
משתמש - היכל התהילה
|
אני לא בטוח שהבנתי, אבל נראה לי שהכי פשוט יהיה לך לעשות SELECT עם DISTINCT להכל, לנקות את הטבלה ולהכניס אליה את כל הנתונים/להכניס את כל הנתונים לטבלה אחרת (אם אתה מעדיף לא למחוק ישר).
|
01-12-09, 20:24 | # 3 | |
חבר בקהילה
|
ציטוט:
אני צריך לזהות כפילות של שדה מסויים (SUB_ID) במספר כניסות בטבלה. כאשר כול כניסה בטבלה מאופיינת ב-LIST_ID אחר (כלומר, אותו מזהה-משתמש מופיע בכמה רשימות). אחרי הזיהוי הזה אני צריך למחוק את הכניסה של ה-LIST_ID הלא רצוי. אין לי בעיה להגדיר את ה-LIST_ID למחיקה ו\או להריץ כמה סבבים של ניקוי וכול פעם להתייחס לצמד של LIST_ID'ים. השאלה - מה השאילתא הנכונה לזה?
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית |
|
01-12-09, 20:53 | # 4 |
משתמש - היכל התהילה
|
מההסבר שלך הפתרון שנתתי לך הוא כן נכון, אם אני מבין. תקן אותי אם אני טועה אבל מה שאתה מחפש זה להגיע מערכים שכאלו:
PHP קוד:
PHP קוד:
|
01-12-09, 21:03 | # 5 |
חבר בקהילה
|
לא בדיוק, אבל בערך ... כלומר: אני לא רוצה ליצר רשימה חלקית אלא לנקות את הטבלה הקיימת.
כלומר, כרגע יש לי (ואני לא מציג את השדות הנוספים שיש בטבלה): PHP קוד:
PHP קוד:
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית |
01-12-09, 22:53 | # 6 |
משתמש - היכל התהילה
|
יש כמה דרכים לפתור את זה, אתה יכול לשלוף את כל הSUB_IDים עם DISTINCT ואז לשלוף לכל אחד LIST_ID שזו הדרך הטיפשית,
אני ממליץ לך לשלוף הכל מסודר לפי SUB_ID ואז לעבור על הכל עם WHILE, ליצור משתנה עזר lastid ולשים בו כל פעם את הערך של השורה האחרונה, אם הערך הזה לא שווה לשורה הנוכחית להכניס את השורה למערך כלשהו. אח"כ תנקה את הטבלה. לבסוף תריץ שאילתות INSERT בשביל להכניס את הנתונים, או שאילתא אחת גדולה, או שתריץ מלא שאילתות DELETE בצורה נורא מורכבת. |
04-12-09, 18:02 | # 7 |
חבר על
|
למה לא לשלוף כל פעם שורה אחת, ואז לבדוק אם היא קיימת במאגר, אם כן למחוק את השורה השניה שנמצאה וככה להמשיך.
|
06-12-09, 12:39 | # 8 |
חבר בקהילה
|
זה לא שאתה לא צודק - אבל מבחינת סיבוכיות זה הפתרון הכי גרוע שיכול להיות ... תבין, יש לי כ-40K רשומות להריץ (ואז אתה מבקש ממני לבצע N! של זה ...).
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|