作者dinos (Guardian Angel)
看板PHP
标题Re: [问题] 有关MySQL中auto_increment的问题
时间Sun Dec 18 12:34:06 2005
※ 引述《sedc (半个圣诞夜)》之铭言:
: ※ 引述《dinos (Guardian Angel)》之铭言:
: : 如果你的 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来新增
: 如果真的没其他办法就只能这样做啦
: 谢谢
拍卖网站那是
Table1 {
ItemID bigint(20) unsigned not null auto_increment PRIMARY,
}
Table2 {
QaID int(10) unsigned not null auto_increment PRIMARY,
ItemID bigint(20) unsigned not null INDEX,
}
一定是先 ItemID 先有存在,才能在 QaID 去对映 ItemID
不可能 QaID 增加时让 ItemID 也自动增加
不然
你应该要有个栏位(MaxQaID)记录各个 ItemID 的 Max QaID 是多少
Tbl {
Pky bigint(20) unsigned not null auto_increment PRIMARY,
ItemID bigint(20) unsigned not null auto_increment INDEX,
QaID int(10) unsigned not null INDEX,
MaxQaID int(10) unsigned not null 0,
}
INSERT INTO Tbl(ItemID,QaID) VALUE(CASE WHEN QaID>=MaxQaID THEN MAX(IitemID)+1 \
ELSE MAX(ItemID) END, CASE WHEN QaID>=MaxQaID THEN '1' ELSE \
Max(QaID)+1 END);
SELECT MaxQaID WHERE ItemID=MAX(ItemID)
if MaxQaID==0 {} else {}
大概是这样
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.158.10
1F:推 sedc:嗯嗯 我知道了 感激不尽 12/18 13:38