2013-08-20 68 views
0

我正在使用MySQL。我有3个字段的表格:id,price,count。我需要编写小计费系统,并且遇到了一些问题。例如:复制数据库字段

  1. 用户需要新电脑。用户将价格和计数写入数据库(例如999,1)。
  2. 管理员有能力确认此价格或编辑。如果管理员确认这个价格并计算我需要保存用户价格和数量和管理员。我是否需要创建重复字段(例如,confirmed_price,confirmed_count),如果admin更改了此价格,我需要创建changed_price和changed_count字段。在这个变种表中将会有很多0值,并且任何人都可以推荐我解决这个问题的另一种方法
+0

关键字回答你的'2.'取决于你打算做这个信息是什么:你需要填充以什么形式,您需要为审计/报告保留什么等。 –

+0

无论您使用何种架构,我都会将确认的价格和确认计算在内,而不管它们是否已更改。如果您需要查询这些值中的一个是否已更改,您可以简单地比较相等的值。 –

回答

0

一种方法可能是,只需创建一个额外的列状态。

一旦用户输入,也可以是1种状态(意味着刚进入) 批准 - 2 更改 - 3

虽然图1和2可以是相同的行上的改变可以是单独的行中,在获取您可以使用max(status)检索这些记录,以便每个项目只能获得一条记录,即使它们在数据库中可能具有多个ID。

同样的逻辑状态也可以通过其他方式实现同​​样的目的。

+0

感谢您的解决方案,但我需要保存所有值(未确认,确认,更改)。我需要以格式显示它:stated_price,stated_count,changed_price,changed_count ... –

+0

因此,您需要做的就是将每个值存储在一行中,并采用相同的方法获取最大状态,如果您想要最新的值 – skv

0

最简单的方法可能是添加一个额外的列,但这取决于您的情况。

如果你并不需要保存一下原来的价格/数分别为,然后添加一列是容易的,会工作,像这样:节省你的时候

| ID | Price | Num | Verified | 
+--------+-----------+---------+--------------+ 
| 1 | 110 | 1 |  1  | 
| 2 | 999 | 2 |  0  | 

验证时,您可以UPDATE行和请将Verified更改为1.然后,任何具有第Verified = 0列的内容都需要查看,并验证Verified = 1

所以说ID 2应具有3的民你将不得不管理编辑:

UPDATE myTable SET Num=3 WHERE ID=2 

然后,当他们点击“保存”

UPDATE myTable SET Verified=1 WHERE ID=2 

您也可以一举两得一次

UPDATE myTable SET Num=3, Verified=1 WHERE ID=2 

如果要保存旧值,可以轻松创建一个可包含时间戳的存档表。然后,只需在运行更新之前将您的值插入该表中。

注:Count是一个不好的列名,因为它是在SQL

+0

但如果我需要存储数据是创建其他两个字段的良好变体? –

+0

@incredible_titan这是行得通的,但是在每个UPDATE中将活动表插入数据(连同时间戳)一样简单。 –