作者sedc (半个圣诞夜)
看板PHP
标题Re: [问题] 有关MySQL中auto_increment的问题
时间Sun Dec 18 12:05:52 2005
※ 引述《dinos (Guardian Angel)》之铭言:
: ※ 引述《sedc (半个圣诞夜)》之铭言:
: : 作者: sedc (半个圣诞夜) 看板: Web_Design
: : 标题: [问题] 有关MySQL中auto_increment的问题
: : 时间: Fri Dec 16 15:07:46 2005
: : 假设现在有二个table
: : Item
: : (
: : ItemID int auto_increment primary key,
: : blahblah............
: : );
: : QA
: : (
: : ItemID int,
: : QAID int auto_increment,
: : primary key (ItemID,QAID)
: : QAothers ......
: : );
: : 简单地说呢,每一个ITEM都会有数个QA,而QA也是跟着Item存在的,所以
: : 我想让QA的ItemID跟Item的ItemID做reference,也就是把ItemID弄成foreign key
: : 用法我知道是 加上foreign key及 references Item(ItemID),但现在有个问题
: : 是因为在QA中,必须要由ItemID及QAID共同组成primary key,而我又希望属於同一个
: : ItemID的QAID可以自动做increment,也就是说
: : 第一笔资料 第二笔资料
: : ItemID 1 ItemID 1
: : QAID 1 QAID 2
: : 若今天我要输入第三笔资料,他的ItemID是2,那有没有办法让mysql自动把它的QAID降
: : 回1,而不是3呢?
: : (如果照我上面的指令打的话,会出现「使用auto_increment的栏位必须被指定为key」
: : 的错误讯息, 但若在QAID加上了key,又会出现「多个primary key」的错误)
: : 还是只能自己用网页的程式部份来判断了呢? 谢谢~
: 如果你的 ItemID 跟 QaID 的对应是固定的,比如每两(n)个 QaID 就 ItemID 加一
: ItemID QaID Pky=(ItemID*2+QaID-2)=(ItemID*n+QAID-n)
: 1 1 1
: 1 2 2
: 2 1 3
: 2 2 4
: 3 1 5
: 3 2 6
: 4 1 7
: 等等等.....
: 所以 ItemID = (Pky+2-QaID)/2 = floor((Pky-1)/2)+1 = floor((Pky-n)/n)+1
: QaID = (Pky+2-ItemID*2) = 2-(Pky+2)%2 = n-(Pky+n)%n
: 在 MySQL 里就不要 ItemID 和 QaID,改成以 Pky 代替
: 如:
: Pky bigint(20) unsigned not null auto_increment PRIMARY
: QAother ......................
: mysql_query 用
: SELECT Pky, (FLOOR((Pky-1)/2)+1) as ItemID, (2-MOD(Pky+2,2)) as QaID FROM ....
: =>
: SELECT Pky, (FLOOR((Pky-1)/n)+1) as ItemID, (n-MOD(Pky+n,n)) as QaID FROM ....
: 就可以得到 ItemID 和 QaID
: 而且,只要确保 Pky 是自动递增,那 ItemID 和 QaID 也会是自动递增
嗯嗯 ,谢谢你的回覆 不过每个ItemID中包含的QAID数目不是固定的耶,
因为我们要做的是像拍卖网站上那样的「问与答」
目前唯一想到的办法是在每次新增时都去搜寻该ItemID下,QAID的最大值,再+1来新增
如果真的没其他办法就只能这样做啦
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.141.243