使用数值

时间:2019-02-10 12:14:15

标签: php mysql database reactjs

我将这种文本称为“描述”,但某些值是数字,必须根据比率进行更改。我想知道如何正确地将其存储在数据库中。

“--在7个袋子中添加49东西”

我最初的想法是:

+-------+------+---------------+------+---------+------------+-----------+
| part1 | num1 |     part2     | num2 |  part3  |  rationum1 | rationum2 |
+-------+------+---------------+------+---------+------------+-----------+
| - Add |   49 | things  in my |    7 |    bags |        1.3 |       1.2 |
+-------+------+---------------+------+---------+------------+-----------+

但是似乎效率很低。另外,我想在某些方面添加工具提示。例如,“-Add”必须链接一个工具提示,但我不知道如何仅在表的一部分上应用属性。

任何建议都将受到欢迎!

编辑:我正在使用PHP以JSON形式获取数据,然后在显示中使用JavaScript(反应)。

2 个答案:

答案 0 :(得分:2)

您建议的表布局没有错。这也不是没有效率的。 MySql是为此构建的。它可以处理数百万行这类事情,而不会费力。

请为每行添加一个自动递增的id值,以用作主键。您可能还希望考虑添加一个时间戳列。

将num1和num2列定义为int,或者如果需要分数,则定义为double。 (JavaScript将所有数字都视为双数。)

将小数列定义为double

将文本列定义为varchar(250)或类似的内容,并为工具提示的文本添加文本列。

然后,您完成了。

但是,当我查看您的示例时,在7个袋子中添加49东西。我看到的不仅仅是单词。

  • 动词:添加
  • source_count: 49
  • 来源描述:事物
  • 介词:
  • 所有格:
  • target_count: 7
  • target_description:箱包

您的系统是否还需要说出从Joe的2个弹药盒中偷走5个手榴弹或类似的东西(我假设您正在做某种游戏)?

如果是这样,您可能希望考虑到短语的各个部分,以一套更为详尽的表格布局。然后您的查询可以使用适当的JOIN操作。

答案 1 :(得分:2)

也许将其标准化。

F.e。将带有占位符的说明和工具提示一起放在另一个表中。

然后将带有项目的外键放在表中。

示例代码:

DROP TABLE IF EXISTS tst_stuff;
DROP TABLE IF EXISTS tst_stufftodo;

CREATE TABLE tst_stufftodo (id int primary key auto_increment, description varchar(100), tooltip varchar(1000));

CREATE TABLE tst_stuff (id int primary key auto_increment, name varchar(100), num1 int not null default 0, num2 int not null default 0, rationum1 decimal(4,1) not null default 0, rationum2 decimal(4,1) not null default 0, 
std_id int,
FOREIGN KEY (std_id) REFERENCES stufftodo(id)
);

INSERT INTO tst_stufftodo (description, tooltip)
VALUES 
('Add &num1& things in my &num2& &name&', 'Add the stuff');

INSERT INTO tst_stuff (name, num1, num2, rationum1, rationum2, std_id) VALUES
('bags', 49, 7, 1.2, 1.3, 1),
('socks', 1000000, 2, 0.5, 0.6, 1);

select s.id, replace(replace(replace(std.description,'&name&',s.name), '&num1&',s.num1), '&num2&',s.num2) as description
from tst_stuff s
join tst_stufftodo std on std.id = s.std_id;

结果:

id  description
1   Add 49 things in my 7 bags
2   Add 1000000 things in my 2 socks

但是最好替换PHP表示层中的占位符。