ניהול מודעות בSQL
-
אני בונה מערכת לפרסום דירות, כחלק מהפרוייקט אני צריך לתת למאזין להרשם כמנוי לצינתוקים לפי סינון לדוגמא דירות בירושלים, דירות 4 חדרים ברמת אלחנן שבבני ברק. וכמובן צריך שתהיה אפשרות לסנן מה המאזין שמע כבר ומה לא.
מאגר לנתוני הדירות עשיתי עם כל הלוגיקה של הכנסה, מציאת התאמה, שליפה, עדכון ומחיקה.
השאלה איך עושים את הקטע של המאזינים?
אני יכול להוסיף מסד נתונים שיכיל מספר טלפון ואת הנתונים האפשריים וכשיש מודעה חדשה להשוות אותה לנתונים האלו ואם יש התאמה לצנתק לאותו אחד. זה נכון?
איך עושים את ניהול המודעות? מה הוא שמע ומה לא? -
אתה עושה טבלה נפרדת, ששמה יש מה הוא שמע, נניח נקרא לה ModhaToPhone, יש בה שלוש עמודות: ModhaId, Phone, At שזה מזהה מודעה, מזהה מאזין - מספר טלפון ותאריך.
בשליפת הסינון אתה מחבר בין הטבלה של הדירות (מודעות) לטבלת הדירה_מאזין עם LEFT JOIN עם התניה שדירה_מאזין ריק, ככה:SELECT * FROM Modaot LEFT JOIN ModhaToPhone ON ModhaToPhone.ModhaId = Modaot.Id AND ModhaToPhone.Phone = '050xxxx' WHERE ModhaToPhone.ModhaId IS NULL
השאילתה הזאת לוקחת מטבלת המודעות רק שורות שאין להם שורה תאומה בטבלת הModhaToPhone עם הטלפון של המתקשר הנוכחי, מה שמבטיח שהוא לא יקבל תוצאות שהוא כבר שמע.
נוסח שונה לשליפה:
SELECT * FROM Modaot WHERE NOT EXISTS( SELECT 1 FROM ModhaToPhone WHERE ModhaToPhone.ModhaId = Modaot.Id AND ModhaToPhone.Phone = '050xxxx' )
כמובן שאחרי השליפה והשמעה יש להכניס לטבלת ההשמעות את המודעות.