以auto_increment的形式为用户提供唯一ID

时间:2011-09-25 12:48:05

标签: mysql sql

让我解释一下,采取库存系统。你有物品,你有房间。如果我有一个项目表,这意味着每个人的数据都插入到同一个表中。因此,主键(item_id)由1自动增加。所以“John”两周后注册,他的第一个项目的id可能是210.我怎样才能为每个用户提供他们自己的“id?”如果我有1000个用户,就不必创建自己的表格,这可能会变得混乱。

| item_id | item_name | user_id |
|    1    |  sofa     |    1    |
|    2    |  ps3      |    1    |
|    3    |  ipad     |    1    |
|    4    |  laptop   |    2    |

示例网址:

http://domain.com/item/view/1

John会为他的第一个项目获得http://domain.com/item/view/210的网址。

如果这有助于其他人,这就是我最终做的事情。

创建映射表。在我的情况下,使用item_iduser_id的“users_items”并删除主键。

SELECT case when item_id IS NULL then isnull(max(item_id)+1) else max(item_id) +1 end as item_id 
    FROM users_items WHERE user_id = $user+id;

2 个答案:

答案 0 :(得分:1)

也许创建一个额外的列item_code,您可以使用

之类填充
SELECT ISNULL(MAX(item_code) + 1) FROM item
WHERE user_id = 2

考虑到item_id是一个代理键,它的价值无关紧要,用户不关心这一点,但是项目代码可以是用户要显示的代码。

答案 1 :(得分:1)

如果仅关于项目ID对用户可见的地方,为什么不在某些列中为每个用户存储第一个item_id,然后只将所需的ID(例如从URL)添加到此数字? 例如,在用户表中,id = 2的用户将拥有4作为此列的值,当他打开url / item / view /%X系统时,将(%x-1)添加到4并获得真实的item_id。