【问题标题】:Database set cell to NULL数据库将单元格设置为 NULL
【发布时间】:2011-08-31 09:21:16
【问题描述】:

我的表结构如下:

Inventory: userid - a - b - c - d - e - f - g - h - i - j - k

这些字母代表库存的插槽。这里存储了产品的 ID。这些产品的数据也存储在一个名为Products 的表中。 Inventory 中的值链接到Products 中项目的id

用户想要从他的库存中扔掉​​一个产品,点击一个按钮并使用 ajax 将项目的id 发送到服务器。

如果我没有除 id 以外的信息,如何找到包含该产品的单元格并将其设置为 NULL?

附:我正在使用 Symfony 框架,如果这能让事情变得更容易的话。

【问题讨论】:

    标签: mysql sql symfony1 symfony-1.4


    【解决方案1】:

    不是最好的解决方案,只是一个想法:

    UPDATE Inventory SET a = NULL WHERE a = id AND userid=uid;
    UPDATE Inventory SET b = NULL WHERE b = id AND userid=uid;
    ...
    UPDATE Inventory SET k = NULL WHERE k = id AND userid=uid;
    

    这个应该可以,但我无法运行它来测试:

    UPDATE Inventory 
    SET 
     a = CASE WHEN a=id THEN NULL ELSE a END,
     b = CASE WHEN b=id THEN NULL ELSE b END,
     c = CASE WHEN c=id THEN NULL ELSE c END,
     d = CASE WHEN d=id THEN NULL ELSE d END,
     e = CASE WHEN e=id THEN NULL ELSE e END,
     f = CASE WHEN f=id THEN NULL ELSE f END,
     g = CASE WHEN g=id THEN NULL ELSE g END,
     h = CASE WHEN h=id THEN NULL ELSE h END,
     i = CASE WHEN i=id THEN NULL ELSE i END,
     j = CASE WHEN j=id THEN NULL ELSE j END,
     k = CASE WHEN k=id THEN NULL ELSE k END
    WHERE userid=uid;
    

    【讨论】:

    • 我认为这是最好的解决方案;但这太可怕了。 Rovinari 你有没有考虑过改变你的桌子,这样你就不必做这样的事情了?至少它在用户 ID 和产品 ID 上应该是唯一的。
    • @Ben:你说得对,这太可怕了,我知道 :( 我认为第二种语法是 “一个非常好的解决方案”(如果可行的话),但是表格设计没有帮助...
    • @Ben 用户 ID 和产品 ID 绝对是唯一的。如何更正此表结构以使事情变得更容易?
    • @Rovinari:你可以有这张表:userid - slot_id - product_id。因此,对于单个用户,您将有 11 行(从 ak 的每个插槽一个),其中 slot_id 是一个 INT。删除项目变得容易:UPDATE Inventory SET product_id=NULL WHERE user_id=uid AND product_id=id;
    • 我没有想到这种可能性。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多