Re: [問題] 有關MySQL中auto_increment的問題

看板PHP作者 (Guardian Angel)時間19年前 (2005/12/18 12:17), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《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
文章代碼(AID): #13fEBPQC (PHP)
文章代碼(AID): #13fEBPQC (PHP)