我将这种文本称为“描述”,但某些值是数字,必须根据比率进行更改。我想知道如何正确地将其存储在数据库中。
“--在7个袋子中添加49东西”
我最初的想法是:
+-------+------+---------------+------+---------+------------+-----------+
| part1 | num1 | part2 | num2 | part3 | rationum1 | rationum2 |
+-------+------+---------------+------+---------+------------+-----------+
| - Add | 49 | things in my | 7 | bags | 1.3 | 1.2 |
+-------+------+---------------+------+---------+------------+-----------+
但是似乎效率很低。另外,我想在某些方面添加工具提示。例如,“-Add”必须链接一个工具提示,但我不知道如何仅在表的一部分上应用属性。
任何建议都将受到欢迎!
编辑:我正在使用PHP以JSON形式获取数据,然后在显示中使用JavaScript(反应)。
答案 0 :(得分:2)
您建议的表布局没有错。这也不是没有效率的。 MySql是为此构建的。它可以处理数百万行这类事情,而不会费力。
请为每行添加一个自动递增的id
值,以用作主键。您可能还希望考虑添加一个时间戳列。
将num1和num2列定义为int
,或者如果需要分数,则定义为double
。 (JavaScript将所有数字都视为双数。)
将小数列定义为double
。
将文本列定义为varchar(250)
或类似的内容,并为工具提示的文本添加文本列。
然后,您完成了。
但是,当我查看您的示例时,在7个袋子中添加49东西。我看到的不仅仅是单词。
您的系统是否还需要说出从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表示层中的占位符。