我是sql的新手,正在构建mysql和php应用程序。
我可能正在计划表本身错误,如果是这样,将感谢任何想法。
我有块包含一些列,包括标题,文本,标语。
标题和文本都比看上去更复杂,因为我需要字体,大小以及每个文本的批准。所以我用这些列创建了一个文本表。
这些是表格:
blocks
id(increment),text(texts.id),title(texts.id),slogan(texts.id),
type(enum),time(datetime),difficulty(int)
texts
id(increment),Text(text),font(varchar),size(int),approval(approval.id)
aprrovals
id(increment), User(varchar), time(datetime)
所以这是问题:
这是保存此信息的好方法吗?我应该让textx保存它们所属的块ID吗?
如何显示包含块的所有列的表,但显示来自texts.Text而不是id的实际文本?
我如何选择批准。用户使用特定块的特定文本?
最佳答案
如果我正确理解了您的问题,则认为不需要“批准”表。如果一个文本可以有一个且只有一个用户批准,并且可以在一个日期和只有一个日期批准,则无需分开批准。
我应该让textx保存它们所属的块ID吗?
我认为这取决于您的建模需求。它是否总是一个文本,一个标题和一个口号,是否必须全部填写这三个?如果是这样,是否像现在一样进行就没有关系了。但是,如果您经常看到一个仅包含文本且没有标题和标语的块,则使“文本”引用块可能更有意义。
如何显示包含块的所有列的表,但显示来自texts.Text而不是id的实际文本?
这样的事情应该会让您入门:
SELECT b.id, text.text, title.text, slogan.text, b.type, b.time, b.difficulty
FROM blocks AS b
JOIN texts AS text ON b.text = texts.id
JOIN texts AS title ON b.title = texts.id
JOIN texts AS slogan ON b.slogan = texts.id
我如何选择批准。用户使用特定块的特定文本?
SELECT a.user
FROM approvals AS a
JOIN texts AS t ON a.id = t.approval
JOIN blocks AS b ON b.text = t.id
WHERE b.id = idToLookFor