snippet/vault
🔎
ST EDU
2 snippets পাওয়া গেছে
আপনি student_fee টেবিলে stu_id = 64 এর সব ফি খুঁজতেছেন — তবে এমন ফি যেগুলা student_fee_collection টেবিলে নেওয়া হয় নাই, অর্থাৎ fee_id student_fee_collection-এ নাই। তাই নিচের SQL টি আপনার উদ্দেশ্য একদম ঠিকভাবে পূরণ করবে:
SELECT * FROM student_fee 
WHERE stu_id = 64 
  AND fee_id NOT IN (
      SELECT fee_id 
      FROM student_fee_collection
  );
//before add zero in phone number
UPDATE `students`
SET `f_phone` = CONCAT('0', `f_phone`)
WHERE LENGTH(`f_phone`) = 10;
Update phone number
UPDATE `students` SET
`phone` = '01852148425' ,
`f_phone` = '01852148425' ,
`m_phone`	= '01852148425' ,
`g_phone`  = '01852148425' 
WHERE 1;
-- তুমি যদি চাও যেসব marks এন্ট্রির subject_id আর subjects টেবিলে নেই (মানে ডিলিট হয়ে গেছে), সেগুলো মুছে ফেলতে — তাহলে নিচের DELETE কুয়েরি ব্যবহার করো:
DELETE m
FROM marks m
LEFT JOIN subjects s ON m.subject_id = s.id
WHERE s.id IS NULL;
-- ✅ ভুল subject যুক্ত মার্ক এন্ট্রি (সার্চ):
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;
-- Admission Fee Delete Query
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';
-- -Development Fee Update Query for Old Students
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';
-- //Same year duplicate student details query
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 Query to Set f_phone from phone
UPDATE students 
SET f_phone = phone
WHERE f_phone IS NULL OR f_phone = '';
-- ই কোয়েরিটি সরাসরি students টেবিলের সব ID চেক করবে এবং যে ID গুলো সেখানে নেই, সেগুলো student_details থেকে নিয়ে আসবে।
SELECT * 
FROM student_details 
WHERE student_id NOT IN (
    SELECT id 
    FROM students 
    WHERE id IS NOT NULL
);
-- ✅ ভুল subject যুক্ত মার্ক এন্ট্রি (সার্চ):
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 টেবিলে এখনও তাদের কোনো টাকা জমা পড়ে নাই
-- যেসব ফি-র ডেটা 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;
-- অপশন ১: ডুপ্লিকেটগুলোর মধ্যে ১টি রেখে বাকি কপিগুলো ডিলিট করতে (Safe & Recommended) -- ধরে নিন,
একই ছাত্রের একই ফি ২ বার এন্ট্রি হয়েছে এবং কোনো কালেকশন হয়নি। এই কুয়েরিটি চালালে ১টি মেইন এন্ট্রি (সবচেয়ে ছোট 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
);
-- প্রতিটা ডুপ্লিকেট লাইনের ID সহ দেখতে চাইলে: -- উপরের কুয়েরিটি শুধু দেখাবে কোন কোন ডেটা ডুপ্লিকেট আছে। কিন্তু আপনি যদি ডুপ্লিকেট হওয়া প্রতিটা রো-এর id এবং title সহ আলাদা আলাদা লাইনে দেখতে চান, তাহলে এই কুয়েরিটি ব্যবহার করুন:
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;
-- আপনার নতুন শর্ত অনুযায়ী, class_id = 11 এবং session_id = 5 এর শিক্ষার্থীদের যেসব ফি এখনো কালেকশন হয়নি (ডুপ্লিকেট চেক ছাড়া), সেগুলো মুছে ফেলার জন্য নিচের কুয়েরিটি ব্যবহার করতে পারেন:
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;
-- আপনার দেয়া টেবিল থেকে একই session_id, class_id, এবং student_id ১টার বেশি (Duplicate/ডুপ্লিকেট) যেগুলোতে আছে, সেগুলো খুঁজে বের করার SQL Query লিখে দিয়েছি।
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`;
-- ধাপ ২: ইউনিক ইনডেক্স (Unique Key) যুক্ত করা -- এখন টেবিলে UNIQUE Constraint প্রয়োগ করুন। এরপর থেকে একই session_id, class_id, এবং student_id দিয়ে ২য় বার ডাটা ইনসার্ট হতে পারবে না।
ALTER TABLE `student_details` 
ADD UNIQUE KEY `unique_student_session_class` (`session_id`, `class_id`, `student_id`);
teacher_information
INSERT INTO akfhhighschool_emsdb.teachers ( 
    designation, name, joining_date, birthdate, mpo_date,
    index_no, email, phone, nid, photo, edu_qualification, status
)
SELECT
    degination, teacher_name, joining_date, birth_day, mpo_date,
    NULL, email, mobile, nid, picture, education_status, status
FROM akfhhighschool_websitedb.teacher_information;

UPDATE `teachers` SET `type` = 'Teacher' WHERE  1;
UPDATE teachers
SET teacher_code = CONCAT('25', LPAD(id, 2, '0'));
-- Notice Migration
INSERT INTO akfhhighschool_emsdb.notices (title, description, file, created_at, updated_at)
SELECT
    title,
    title, -- description এও title বসানো হলো
    file_name,
    date,
    date
FROM akfhhighschool_websitedb.upload_file
WHERE 1 ;
-- Exam Result Migration
INSERT INTO akfhhighschool_emsdb.exam_result (`date`, `title`, `file`, `status`, `created_at`, `updated_at`)
SELECT
    date,
    title,
    file_name,
    1,              -- status ফিক্সড 1
    date,
    NOW()
FROM akfhhighschool_websitedb.upload_file
WHERE 1;
-- Executive Council Migration
INSERT INTO akfhhighschool_emsdb.excutive_council (id, name, designation, category)
SELECT id, name, designation, details
FROM akfhhighschool_websitedb.excutive_council;