Re: [問題] 有關MySQL中auto_increment的問題
※ 引述《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
推
12/18 13:38, , 1F
12/18 13:38, 1F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章