让我解释一下,采取库存系统。你有物品,你有房间。如果我有一个项目表,这意味着每个人的数据都插入到同一个表中。因此,主键(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_id
和user_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;
答案 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。