اضافه کردن فیلد شمارنده به جدول

bono056

Member
سلام
من تو یه جدول یه فیلد اضافه کردم به نام orderr.
بعد کل رکوردها ها رو با یه select انتخاب میکنم و میخوام این ترتیب نشوت دادن رکورد ها رو یه جوری save کنم. برای اینکار میخوام تو فیلد order شماره های 1 تا n رو insert کنم. این کار رو میتونم با دستورات خود mysql انجام بدم؟
 

jhoseini

Member
میخای آخرین ترتیب بندی رو یه جایی نگه داری؟ یا اینکه میخای رکورد ها با یه ترکیب بندی خاص قرار بگیره و دفعات بعد نیاز به order by .. نداشته باشی؟
297.gif
 

parsmizban

Member
به نظر من دوستمون دنبال auto increment هستش
یه فیلد id بساز auto increment ش کن
هر row که بهش insert شه یک عدد به این فیلد اتومات اضافه می شه
 

bono056

Member
میخای آخرین ترتیب بندی رو یه جایی نگه داری؟ یا اینکه میخای رکورد ها با یه ترکیب بندی خاص قرار بگیره و دفعات بعد نیاز به order by .. نداشته باشی؟
297.gif

آره، میخوام اون ترتیبی که بدست میارم save کنم. یه جور اولویت بندی رکوردهاست. دفعات بعدی نیاز به order by نداشته باشم.
 

tabib_m

Member
آره، میخوام اون ترتیبی که بدست میارم save کنم.
خوب میتونی شماره ی نمایش هر رکورد رو توی یک فیلد دیگه ثبت کنی.

دفعات بعدی نیاز به order by نداشته باشم.
:) در هر صورت بهش نیاز دارید، مگر این که یک فیلد رو به صورت پیشفرض برای سورت کردن، ثبت کنی. که باز هم در این صورت، بخوای نخوای، خود mysql این کار رو (بدون این که شما کدی بدی) انجام میده...

در هر صورت، میتونی با این دستور، حالت پیشفرض سورت رو تعیین کنی:
کد:
ALTER TABLE `tableName` ORDER BY `fieldName`
 

bono056

Member
مثال

سلام
شاید منظورمو بد گفتم. یه مثال شاید بتونه منظورمو برسونه:

یه همچین جدولی رو اگه در نظر بگیریم:

کد:
id fname  age   
-- -----  --- 
1  fred	  26		
2  chris  19		
3  sara	  36		
4  john	  23		
5  billy  31
حالا با همچین دستوری رکوردها رو انتخاب میکنم:
کد:
SELECT * FROM people ORDER BY age
id fname  age   
-- -----  --- 
2  chris  19		
4  john	  23		
1  fred	  26		
5  billy  31		
3  sara	  36
و حالا فیلد نوبت رو اصافه میکنم که نوبت ها رو توش بذارم:
کد:
id fname  age   priority
-- -----  --- 	--------
2  chris  19	1	
4  john	  23	2	
1  fred	  26	3	
5  billy  31	4	
3  sara	  36	5
 

bono056

Member
من یه همچین راه حلی پیدا کردم:

کد:
#create a mirror table with Orderr field:
CREATE TABLE `peopleWithOrderr` (
  `id` int(10) unsigned NOT NULL,
  `fname` varchar(100) NOT NULL default '',
  `age` varchar(20) NOT NULL default '0',
  `Orderr` int(10) unsigned NOT NULL auto_increment,
  PRIMARY KEY  (`Orderr`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

#insert to new table(with Orderr):
INSERT INTO `peopleWithOrderr` (`id`, `fname`, `age`) 
SELECT `id`, `fname`, `age` from people ORDER BY age;

#change primary
#remove autoincreament
ALTER TABLE `peoplewithOrderr` CHANGE `Orderr` `Orderr` INT( 10 ) UNSIGNED NOT NULL;
#change primary
ALTER TABLE `peoplewithOrderr` DROP PRIMARY KEY ,
ADD PRIMARY KEY ( `id` ) ;
ALTER TABLE `peoplewithOrderr` ADD INDEX ( `Orderr` );
 

tabib_m

Member
ممنون. خوب بود. تستش نکردم، ولی یحتمل باید کار کنه...

ولی میشه یه سؤال بپرسم؟
برای چی میخوای صرفا با mysql این کار رو انجام بدی؟ خوب طبیعتا اگر پای php رو بکشی وسط، خیلی راحت تر و سریعتر به نتیجه می رسی!
 

جدیدترین ارسال ها

بالا