הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 01-12-09, 12:48   # 1
ahoy
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 340
שלח הודעה באמצעות MSN אל ahoy

ahoy לא מחובר  

Question שאלת SQL: ניקוי טבלה מרשומות כפולות

אהלן,

צריך עזרה בשאילתא (סדרת שאילתות) נכונה לניקוי טבלה מרשומות כפולות.

מה יש -
1. טבלת רשומות הכוללות את השדות "זיהוי משתמש" ו-"מספר רשימה" (יש רק משתמש יחידני ומספר רשימות שהוא יכול להיות רשום בהן).
2. קיים רישום של אותו "זיהוי משתמש" בכמה כניסות בטבלה ל-"מספרי רשימות" לא רצויים".

מה צריך -
לזהות את הרישומים הכפולים ולנקות אותם. אין לי בעיה להגדיר שמספר הרשימה למחיקה יהיה "10" לדוגמא.

תודה מראש.
  Reply With Quote
ישן 01-12-09, 16:59   # 2
Shay Ben Moshe
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 1,397

Shay Ben Moshe לא מחובר  

אני לא בטוח שהבנתי, אבל נראה לי שהכי פשוט יהיה לך לעשות SELECT עם DISTINCT להכל, לנקות את הטבלה ולהכניס אליה את כל הנתונים/להכניס את כל הנתונים לטבלה אחרת (אם אתה מעדיף לא למחוק ישר).
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
  Reply With Quote
ישן 01-12-09, 20:24   # 3
ahoy
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 340
שלח הודעה באמצעות MSN אל ahoy

ahoy לא מחובר  

Exclamation

ציטוט:
נכתב במקור על ידי Shay Falador צפה בהודעה
אני לא בטוח שהבנתי, אבל נראה לי שהכי פשוט יהיה לך לעשות SELECT עם DISTINCT להכל, לנקות את הטבלה ולהכניס אליה את כל הנתונים/להכניס את כל הנתונים לטבלה אחרת (אם אתה מעדיף לא למחוק ישר).
תודה, אבל זה לא זה.

אני צריך לזהות כפילות של שדה מסויים (SUB_ID) במספר כניסות בטבלה. כאשר כול כניסה בטבלה מאופיינת ב-LIST_ID אחר (כלומר, אותו מזהה-משתמש מופיע בכמה רשימות).

אחרי הזיהוי הזה אני צריך למחוק את הכניסה של ה-LIST_ID הלא רצוי. אין לי בעיה להגדיר את ה-LIST_ID למחיקה ו\או להריץ כמה סבבים של ניקוי וכול פעם להתייחס לצמד של LIST_ID'ים.

השאלה - מה השאילתא הנכונה לזה?
  Reply With Quote
ישן 01-12-09, 20:53   # 4
Shay Ben Moshe
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 1,397

Shay Ben Moshe לא מחובר  

מההסבר שלך הפתרון שנתתי לך הוא כן נכון, אם אני מבין. תקן אותי אם אני טועה אבל מה שאתה מחפש זה להגיע מערכים שכאלו:
PHP קוד:
SUB_ID    LIST_ID
1        1
2        1
1        1
3        2
4        2
1        3
1        3
1        3 
למשהו כזה:
PHP קוד:
SUB_ID    LIST_ID
1        1
2        1
3        2
4        2
1        3 
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
  Reply With Quote
ישן 01-12-09, 21:03   # 5
ahoy
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 340
שלח הודעה באמצעות MSN אל ahoy

ahoy לא מחובר  

לא בדיוק, אבל בערך ... כלומר: אני לא רוצה ליצר רשימה חלקית אלא לנקות את הטבלה הקיימת.

כלומר, כרגע יש לי (ואני לא מציג את השדות הנוספים שיש בטבלה):

PHP קוד:
SUB_ID    LIST_ID
1        1
2        1
1        2
3        2
4        2
1        3
3        3
4        1 
ואת זה אני צריך לנקות ל:
PHP קוד:
SUB_ID    LIST_ID
1        1
2        1
3        2
4        2 
  Reply With Quote
ישן 01-12-09, 22:53   # 6
Shay Ben Moshe
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 1,397

Shay Ben Moshe לא מחובר  

יש כמה דרכים לפתור את זה, אתה יכול לשלוף את כל הSUB_IDים עם DISTINCT ואז לשלוף לכל אחד LIST_ID שזו הדרך הטיפשית,
אני ממליץ לך לשלוף הכל מסודר לפי SUB_ID ואז לעבור על הכל עם WHILE, ליצור משתנה עזר lastid ולשים בו כל פעם את הערך של השורה האחרונה, אם הערך הזה לא שווה לשורה הנוכחית להכניס את השורה למערך כלשהו.
אח"כ תנקה את הטבלה.
לבסוף תריץ שאילתות INSERT בשביל להכניס את הנתונים, או שאילתא אחת גדולה, או שתריץ מלא שאילתות DELETE בצורה נורא מורכבת.
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
  Reply With Quote
ישן 04-12-09, 18:02   # 7
anti
חבר על
 
מיני פרופיל
תאריך הצטרפות: Jul 2006
הודעות: 901

anti לא מחובר  

למה לא לשלוף כל פעם שורה אחת, ואז לבדוק אם היא קיימת במאגר, אם כן למחוק את השורה השניה שנמצאה וככה להמשיך.
  Reply With Quote
ישן 06-12-09, 12:39   # 8
ahoy
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 340
שלח הודעה באמצעות MSN אל ahoy

ahoy לא מחובר  

זה לא שאתה לא צודק - אבל מבחינת סיבוכיות זה הפתרון הכי גרוע שיכול להיות ... תבין, יש לי כ-40K רשומות להריץ (ואז אתה מבקש ממני לבצע N! של זה ...).
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


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

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