Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 单单元多输入_Mysql - Fatal编程技术网

Mysql 单单元多输入

Mysql 单单元多输入,mysql,Mysql,我看到这个问题已经得到了回答,但在另一个例子中,我得到了一些建议和必要的信息。我相信,我和其他人的背景是完全不同的 我的目标是制作一种包含3种表格类型的词典: 表1:包含我所有条目的主词典 包含主键整数;英语单词;汉语词;主题(例如,动物、食物等——这就是我想要为一个单元格设置多个条目的地方,因为一些单词可以用于多个主题);词性(动词、名词等);限定布尔;限定符(如果布尔值为true,则它将包含字符串,如果为false,则它将具有空值);添加日期;难度评定 表2(组):根据主题,每个主题都有自己

我看到这个问题已经得到了回答,但在另一个例子中,我得到了一些建议和必要的信息。我相信,我和其他人的背景是完全不同的

我的目标是制作一种包含3种表格类型的词典:

表1:包含我所有条目的主词典

包含主键整数;英语单词;汉语词;主题(例如,动物、食物等——这就是我想要为一个单元格设置多个条目的地方,因为一些单词可以用于多个主题);词性(动词、名词等);限定布尔;限定符(如果布尔值为true,则它将包含字符串,如果为false,则它将具有空值);添加日期;难度评定

表2(组):根据主题,每个主题都有自己的表格:动物、食物、测量等

该表将包括一个计数整数或表键;英语单词;汉语词;它所属的词类;计数器(在我的应用程序中使用了多少次)

表3(组):词类表。每个表都将以其特定的分支命名。专有名词、普通名词、动作动词等

将包含一个整数键;英语单词;汉语词


这个数据库的目的是提供一个句子生成程序,该程序可以随着我的进度添加词汇表和主题表。在表1中,当单元格跨越多个主题时,我是否应该在单元格中创建多个条目,或者我是否应该完全忽略这些条目,而只是在查询中而不是在db表本身中组装该表?

尝试一种模式,类似这样:

CREATE TABLE `words` (
  `id`         serial PRIMARY KEY,
  `english`    varchar(255) NOT NULL,
  `chinese`    varchar(255) NOT NULL CHARACTER SET utf8mb4,
  `determiner` varchar(255),
  `added`      date NOT NULL,
  `difficulty` tinyint unsigned NOT NULL DEFAULT 1
);

CREATE TABLE `topics` (
  `id`    serial PRIMARY KEY,
  `topic` varchar(255) NOT NULL
);

CREATE TABLE `word_topics` (
  `word_id`  integer,
  `topic_id` integer,
  PRIMARY KEY (`word_id`, `topic_id`),
  FOREIGN KEY (`word_id`) REFERENCES `words`(`id`),
  FOREIGN KEY (`topics_id`) REFERENCES `topics`(`id`)
);

CREATE TABLE `parts_of_speech` (
  `id`             serial PRIMARY KEY,
  `part_of_speech` varchar(255) NOT NULL
);

CREATE TABLE `word_pos` (
  `word_id` integer,
  `pos_id`  integer,
  PRIMARY KEY (`word_id`, `pos_id`),
  FOREIGN KEY (`word_id`) REFERENCES `words`(`id`),
  FOREIGN KEY (`pos_id`) REFERENCES `parts_of_speech`(`id`)
);
还有像这样的查询:

SELECT `w`.*, `topic`, `part_of_speech`
FROM `words` AS `w`
LEFT JOIN `word_topics` AS `wt` ON `w`.`id` = `wt`.`word_id`
LEFT JOIN `topics` AS `t` ON `t`.`id` = `wt`.`topic_id`
LEFT JOIN `word_pos` AS `wp` ON `w`.`id` = `wp`.`word_id`
LEFT JOIN `parts_of_speech` AS `p` ON `t`.`id` = `wp`.`pos_id`
上面也编辑过。。。 要按主题获取随机单词,请执行以下操作:

SELECT `w`.*, `topic`, `part_of_speech`
FROM `words` AS `w`
LEFT JOIN `word_topics` AS `wt` ON `w`.`id` = `wt`.`word_id`
LEFT JOIN `topics` AS `t` ON `t`.`id` = `wt`.`topic_id`
LEFT JOIN `word_pos` AS `wp` ON `w`.`id` = `wp`.`word_id`
LEFT JOIN `parts_of_speech` AS `p` ON `t`.`id` = `wp`.`pos_id`
WHERE `wt`.`topic_id` = ?
ORDER BY random()
LIMIT 1

您还可以(替换或)使用
/
关键字向
WHERE
子句添加其他条件…

了解数据库规范化。单个单元格中的多个条目违反了规范化规则。好的,所以您编写的部分内容看起来确实可用。我正在使用SQLiteStudio,我寻找了一种将“字符集utf8mb4”添加到模式中的方法,但没有找到一种方法。我应该在文本编辑器中编辑模式吗?我是否缺少SQLiteStudio客户端中的某些内容?另一个问题是,我需要为每个主题设置一个表。原因是我需要创建一个随机方法,该方法将获得一个介于1~.length()之间的数字。因此,键(在给定的主题表中)将包含允许我这样做的整数。您将问题标记为
MySQL
,现在您编写了您使用
SQLite
。。。我的答案是使用
MySQL
语法,特别是
字符集
部分。。。