خب ابتدا من یک دیتابیس تمثیلی میسازم و چند رکورد توش اضافه میکنم که یوزرنیم های تکراری داره
کد:
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]](http://s2.zipupload.ir/direct/uid_1_fid501_1395-05-13_12_58_39_221151957.png)
کد:
SELECT * FROM `users` group by useame;
![[تصویر: uid_1_fid502_1395-05-13_13_01_36_808888295.png]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/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]](http://s2.zipupload.ir/direct/uid_1_fid512_1395-05-13_13_13_41_261591203.png)
امیدوارم از این آموزش لذت برده باشید
با تشکر ، رضا شیخله
ما را در سایت php مرکز کد های سایت دنبال میکنید
برچسب: نویسنده: استخدام کار بازدید: 155