簡體   English   中英

MySQL從另一個表分配一個唯一值

[英]MySQL assign a unique value from another table

我有一個我無法弄清楚的問題,我經驗不足(或者無法完成!)。

我有一個系統,我需要為每個行分配一個ID,並使用另一個表中的ID。 要注意的是,此批處理中創建的每一行的ID必須唯一。

基本上,我在Tumblr帳戶上銷售鏈接,我需要為每個客戶購買的鏈接分配一個Tumblr帳戶,但我想分配所有可能的Tumblr帳戶,以便將重復項保持在最低限度。

URL-客戶購買的每個鏈接都存儲在此表中(urls_anchors):

+----------+--------------------+------------+-----------+------+
| clientID |        URL         |   Anchor   | tumblrID  | paid |
+----------+--------------------+------------+-----------+------+
|     1234 | http://example.com | Click here |        67 | Yes  |
|     1234 | http://example.com | Click here |        66 | Yes  |
|     1234 | http://example.com | Click here |        65 | Yes  |
|     1234 | http://example.com | Click here |        64 | Yes  |
+----------+--------------------+------------+-----------+------+

所有可分配的Tumblr帳戶都存儲在此表中(tumblrs):

+----------+-------------------+------------+
| tumblrID |     tumblrURL     | spacesLeft |
+----------+-------------------+------------+
|       64 | http://tumblr.com |         9  |
|       65 | http://tumblr.com |         9  |
|       66 | http://tumblr.com |         9  |
|       67 | http://tumblr.com |         9  |
+----------+-------------------+------------+

我對此的最佳嘗試是以下查詢:

INSERT INTO `urls_anchors` (`clientID`, `URL`,`Anchor`, `tumblrID`, `paid`) VALUES ('$clientID','$url','$line', (SELECT @rank:=@rank+1 AS tumblrID FROM tumblrs WHERE @rank < 68 LIMIT 1), 'No')

當只有X個要分配的Tumblrs時,該方法有效,但會無限期地遞增。 我需要查詢在到達Tumblrs的最后一行時返回並再次遍歷該列表。

我也在PHP腳本中使用它,我不確定這是否有意義。

任何幫助將不勝感激!

感謝您的光臨:)

您可以使用SELECT查詢作為要插入的數據源。

INSERT INTO urls_anchors (`clientID`, `URL`,`Anchor`, `tumblrID`, `paid`) 
SELECT '$clientID','$url','$line', tumblrID, 'No'
FROM tumblrs
LIMIT $number_of_rows

演示

這將為行分配$number_of_rows不同的tumblrID值。

如果您需要分配比可用的更多的翻轉者ID,則需要循環執行此操作,每次從$number_of_rows減去插入的行數。 您可以使用mysqli_affected_rows()來找出每次插入多少行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM