[آموزش]کار با رکوردهای/سطرهای تکراری در MySQL

خرید بک لینک
سلام
قطعا پیش آمده براتون که در دیتابیس رکوردهای تکراری براساس یک فیلد رخ بده
مثلا ، کاربری با نام کاربری یکسان منتها بصورت حروف بزرگ و کوچیک ثبت نام کرده باشه Reza , reza rEzA
یا حتی مثلا شخصی به اسم رضا اقدام به ارسال چندین نظر کرده باشه
یا اینکه یکی از مطالب اخبارتون دو بار ثبت شده باشه
علی ای حال ، قطعا این مساله رخ میدهد
و اما ما میخوایم ببینیم با اینها چکار کنیم

خب ابتدا من یک دیتابیس تمثیلی میسازم و چند رکورد توش اضافه میکنم که یوزرنیم های تکراری داره

کد:

CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`useame` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `users` (`id`, `useame`, `name`) VALUES
(1, 'reza', 'رضا'),
(2, 'ReZa', 'رضا'),
(3, 'Ali', 'علی'),
(4, 'ali2', 'علی2'),
(5, 'ali', 'علی'),
(6, 'ALi', 'علی با حرف بزرگ'),
(7, 'ali', 'علی با حرف کوچیک');

خب ابتدا یه خروجی بگیریم ببینم نتیجه چی هست

کد:

SELECT * FROM `users` ;

[تصویر: uid_1_fid501_1395-05-13_12_58_39_221151957.png]
خب نتیجه 7 رکورد هست که رکورد 5 با هفت کاملا برابر هستن خب میخوایم این تکراری نشون داده نشه

کد:

SELECT * FROM `users` group by useame;

[تصویر: uid_1_fid502_1395-05-13_13_01_36_808888295.png]

خب اوضاع درست شد ظاهرا اما میبینیم رکورد 1 با 2 و رکوردهای 5و3و6 فقط از نظر بزرگی کوچکی تفاوت دارن خب بیاییم اینم درست کنیم

کد:

SELECT * FROM `users` group by LOWER(useame);

[تصویر: uid_1_fid503_1395-05-13_13_03_21_586066935.png]

خب الان تقریبا خروجیمون درسته ، بیاییم یه کار دیگه هم بکنیم ببینیم از هر رکورد تکراری چند تا وجود داره

کد:

SELECT LOWER(useame),count(LOWER(useame)) FROM `users` group by LOWER(useame);

[تصویر: uid_1_fid504_1395-05-13_13_06_22_452641923.png]

خب آنچه مشخص هست رکوردهایی که تعدادشون بیشتر از یک هست تکراری هستن پس فقط نیاز به اونها داریم

کد:

SELECT LOWER(useame),count(LOWER(useame)) FROM `users` group by LOWER(useame) having count(LOWER(useame))>1 ;

[تصویر: uid_1_fid505_1395-05-13_13_07_25_184688061.png]

خب تا اینجا تقریبا یه سری اطلاعات از رکوردهای تکراری گرفتیم ، اما اصل ماجرا اینجاست میخوایم این رکورهای تکراری رو
از دیتابیس حذف کنیم یعنی مثلا کاربری که با یوزر ali ثبت نام کرده چندین بار
فقط یکی از رکورهاش بمونه و بقیه حذف بشه
قدم اول اینه ، لیست کاربران با یوزرنیم یکتا رو در میاریم به همراه کلید اصلی یا همون آی دی

کد:

SELECT id,useame,count(useame) FROM `users` group by lower(useame) ;

[تصویر: uid_1_fid506_1395-05-13_13_09_53_974360830.png]

در این نتیجه باید id رو جدا کنیم

کد:

select id from (SELECT id,useame,count(useame) FROM `users` group by lower(useame)) _d

[تصویر: uid_1_fid508_1395-05-13_13_10_41_999912785.png]

سپس با یک سابکوئری اعلام میکنیم که در جدول users کلیه رکوردها پاک شود به غیر از این شناسه id ها

کد:

delete from users where id not in (select id from (SELECT id,useame,count(useame) FROM `users` group by lower(useame)) _d )

[تصویر: uid_1_fid509_1395-05-13_13_11_44_31273686.png]

و حالا مشاهده جدول

کد:

select * from users

[تصویر: uid_1_fid510_1395-05-13_13_12_23_49757089.png]

یه کار دیگه هم بکنیم ، نام کاربری ها رو کلا به حروف کوچیک تبدیل کنیم

کد:

update users set useame=LOWER(useame)

و حالا مشاهده جدول مجددا

کد:

select * from users

[تصویر: uid_1_fid512_1395-05-13_13_13_41_261591203.png]

امیدوارم از این آموزش لذت برده باشید
با تشکر ، رضا شیخله

php مرکز کد های سایت...

ما را در سایت php مرکز کد های سایت دنبال می‌کنید

برچسب: نویسنده: استخدام کار بازدید: 155 تاريخ: چهارشنبه 13 مرداد 1395 ساعت: 16:00

صفحه بندی