🔎
ST EDU

ST Edu

19 codes · 2 months ago
SELECT * FROM student_fee 
WHERE stu_id = 64 
  AND fee_id NOT IN (
      SELECT fee_id 
      FROM student_fee_collection
  );
UPDATE `students`
SET `f_phone` = CONCAT('0', `f_phone`)
WHERE LENGTH(`f_phone`) = 10;
UPDATE `students` SET
`phone` = '01852148425' ,
`f_phone` = '01852148425' ,
`m_phone`	= '01852148425' ,
`g_phone`  = '01852148425' 
WHERE 1;
DELETE m
FROM marks m
LEFT JOIN subjects s ON m.subject_id = s.id
WHERE s.id IS NULL;
SELECT m.*
FROM marks m
JOIN student_details sd ON m.stu_details_id = sd.id
LEFT JOIN subjects s 
    ON s.group_id = sd.group_id 
    AND s.class_id = sd.class_id 
    AND s.medium_id = sd.medium_id 
    AND m.subject_id = s.id
WHERE s.id IS NULL;
DELETE m
FROM marks m
JOIN student_details sd ON m.stu_details_id = sd.id
LEFT JOIN subjects s 
    ON s.group_id = sd.group_id 
    AND s.class_id = sd.class_id 
    AND s.medium_id = sd.medium_id 
    AND m.subject_id = s.id
WHERE s.id IS NULL;
DELETE sf 
FROM student_fees sf
JOIN students s ON sf.stu_id = s.id
WHERE sf.ac_head_id = 2 
AND s.unique_id <= '260000';
UPDATE student_fees sf
JOIN students s ON sf.stu_id = s.id
SET sf.amount = 2000, 
    sf.updated_at = NOW()
WHERE sf.ac_head_id = 3 
AND s.unique_id <= '260000';
SELECT *
FROM student_details
WHERE (student_id, session_id, class_id) IN (
    SELECT student_id, session_id, class_id
    FROM student_details
    GROUP BY student_id, session_id, class_id
    HAVING COUNT(*) > 1
);
UPDATE students 
SET f_phone = phone
WHERE f_phone IS NULL OR f_phone = '';
SELECT * 
FROM student_details 
WHERE student_id NOT IN (
    SELECT id 
    FROM students 
    WHERE id IS NOT NULL
);
SELECT m.*
FROM marks m
JOIN student_details sd ON m.stu_details_id = sd.id
LEFT JOIN subjects s 
    ON s.group_id = sd.group_id 
    AND s.class_id = sd.class_id 
    AND s.medium_id = sd.medium_id 
    AND m.subject_id = s.id
WHERE s.id IS NULL;
DELETE m
FROM marks m
JOIN student_details sd ON m.stu_details_id = sd.id
LEFT JOIN subjects s 
    ON s.group_id = sd.group_id 
    AND s.class_id = sd.class_id 
    AND s.medium_id = sd.medium_id 
    AND m.subject_id = s.id
WHERE s.id IS NULL;
-- যেসব ফি-র ডেটা student_fees টেবিলে একাধিকবার (Double/Duplicate) আছে কিন্তু student_fee_collections টেবিলে এখনও তাদের কোনো টাকা জমা পড়ে নাই (Fee collection হয় নাই), সেই ডেটাগুলো বের করার জন্য আপনি নিচের SQL কুয়েরিটি ব্যবহার করতে পারেন।


SELECT 
    sf.stu_id, 
    s.name AS student_name,
    sf.id AS fee_id,
    sf.ac_head_id, 
    sf.fee_date, 
    sf.amount,
    sf.title
FROM student_fees sf
-- ছাত্রের নাম দেখার জন্য JOIN
LEFT JOIN students s ON sf.stu_id = s.id
-- ফি কালেকশন হয়েছে কিনা চেক করার জন্য JOIN
LEFT JOIN student_fee_collections sfc ON sf.id = sfc.fee_id
WHERE 
    -- ফি কালেকশন হয় নাই (কালেকশন টেবিলে কোনো এন্ট্রি নাই)
    sfc.fee_id IS NULL 
    -- এবং এই ফি-র stu_id, ac_head_id, fee_date, amount কম্বিনেশনটি ডুপ্লিকেট
    AND (sf.stu_id, sf.ac_head_id, sf.fee_date, sf.amount) IN (
        SELECT stu_id, ac_head_id, fee_date, amount
        FROM student_fees
        GROUP BY stu_id, ac_head_id, fee_date, amount
        HAVING COUNT(*) > 1
    )
ORDER BY sf.stu_id, sf.fee_date;
একই ছাত্রের একই ফি ২ বার এন্ট্রি হয়েছে এবং কোনো কালেকশন হয়নি। এই কুয়েরিটি চালালে ১টি মেইন এন্ট্রি (সবচেয়ে ছোট ID) টিকে থাকবে এবং বাকি বাড়তি কপিটি ডিলিট হয়ে যাবে।

DELETE sf FROM student_fees sf
-- ফি কালেকশন হয়নি তা নিশ্চিত করার জন্য JOIN
LEFT JOIN student_fee_collections sfc ON sf.id = sfc.fee_id
WHERE sfc.fee_id IS NULL
AND sf.id > (
    -- একই কম্বিনেশনের সর্বনিম্ন ID-টি খুঁজে বের করা
    SELECT MIN(temp.id) 
    FROM (SELECT id, stu_id, ac_head_id, fee_date, amount FROM student_fees) temp
    WHERE temp.stu_id = sf.stu_id 
      AND temp.ac_head_id = sf.ac_head_id 
      AND temp.fee_date = sf.fee_date 
      AND temp.amount = sf.amount
);
SELECT id, stu_id, ac_head_id, title, amount, fee_date, session, status
FROM student_fees
WHERE (stu_id, ac_head_id, fee_date, amount) IN (
    SELECT stu_id, ac_head_id, fee_date, amount
    FROM student_fees
    GROUP BY stu_id, ac_head_id, fee_date, amount
    HAVING COUNT(*) > 1
)
ORDER BY stu_id, fee_date;
DELETE sf
FROM student_fees sf
-- ১. ছাত্রদের ID মিলানোর জন্য students টেবিল JOIN
INNER JOIN students s ON sf.stu_id = s.id
-- ২. class_id এবং session_id চেক করার জন্য student_details টেবিল JOIN
INNER JOIN student_details sd ON s.id = sd.student_id
-- ৩. ফি কালেকশন হয়েছে কিনা চেক করার জন্য LEFT JOIN
LEFT JOIN student_fee_collections sfc ON sf.id = sfc.fee_id
WHERE 
    -- ফিল্টার: নির্দিষ্ট class এবং session
    sd.class_id = 11 
    AND sd.session_id = 5
    
    -- ফিল্টার: ফি কালেকশন হয় নাই (কালেকশন টেবিলে কোনো এন্ট্রি নাই)
    AND sfc.fee_id IS NULL;
SELECT *
FROM `student_details`
WHERE (`session_id`, `class_id`, `student_id`) IN (
    SELECT 
        `session_id`, 
        `class_id`, 
        `student_id`
    FROM 
        `student_details`
    GROUP BY 
        `session_id`, 
        `class_id`, 
        `student_id`
    HAVING 
        COUNT(*) > 1
)
ORDER BY 
    `student_id`, `session_id`, `class_id`;
ALTER TABLE `student_details` 
ADD UNIQUE KEY `unique_student_session_class` (`session_id`, `class_id`, `student_id`);