我似乎无法解决这个问题,过去我通常会使用多个SQL语句执行此操作并使用PHP连接数据。我知道这不是最好的编程方式,所以我想尝试用一个SQL语句获取所有数据。
以下是表格。
表格页:
id name fields
1 home 1,3,4
table data_fields:
id field
1 title
2 subtitle
3 description
4 image
table page_data:
id title subtitle description image link quote
1 Hello null descriptionText null null null
所以基本上我想根据页面ID来提取页面数据。
如何拆分用逗号分隔的pages.fields
字段,然后从data_fields
获取所需的字段,然后从page_data
中提取数据,具体取决于从data_fields检索的字段名称?
答案 0 :(得分:1)
在关系模型下,域应该简单;这被称为“第一范式”。换句话说,不要在一列中打包多个值。通过将pages
列拆分为另一个表来规范化fields
表。例如,
CREATE TABLE page_fields {
page INT UNSIGNED,
field INT UNSIGNED,
FOREIGN KEY `page` REFERENCES `pages` (id),
FOREIGN KEY `field` REFERENCES `data_fields` (id)
} Engine=InnoDB;
然后使用pages
加入data_fields
,page_data
和page_fields
表。
或者,重新构建page_data
表并取消data_fields
:
CREATE TABLE page_data {
page INT UNSIGNED,
name ENUM('title', 'subtitle', 'description', 'image', 'link', 'quote'),
data VARCHAR(...),
FOREIGN KEY page REFERENCES pages (id)
} Engine=InnoDB;
然后与pages
加入page_data
。
答案 1 :(得分:1)
create table PAGES (
id int not null,
title varchar(256) null,
subtitle varchar(256) null,
description varchar(1024) null,
image blob null,
link varchar(256) null,
quote varchar(256)
)
如果页面没有某些属性(标题或drescription等),这个字段只是NULL,你将在php脚本中处理这些信息时记住它。
答案 2 :(得分:0)
您的数据库设计不合理。 Repeating groups within columns是与之合作的PITA。您应该重构数据库设计,然后使用Joins。