SQL中的内部联接,其中一个表包含多个结果
我有两张桌子: 第一张表:SQL中的内部联接,其中一个表包含多个结果,sql,inner-join,entity-attribute-value,Sql,Inner Join,Entity Attribute Value,我有两张桌子: 第一张表: MEMBERS: ID | FIRSTNAME | LASTNAME | 1 Jack Smith 2 Jane Baker 3 Peter Little 第二个表: DETAILS: SUBSCRIBER_ID | FIELD_ID | FIELD_VALUE | 1
MEMBERS:
ID | FIRSTNAME | LASTNAME |
1 Jack Smith
2 Jane Baker
3 Peter Little
第二个表:
DETAILS:
SUBSCRIBER_ID | FIELD_ID | FIELD_VALUE |
1 1 Blue
1 2 Dogs
1 3 March
2 1 Pink
2 2 Cats
2 3 June
3 1 Black
3 2 Birds
3 3 September
字段_ID表示成员上的其他详细信息。i、 e
1 = Favorite color
2 = Favorite animal
3 = Favorite month
我想从DETAILS表中提取一个包含其主要信息成员和额外信息的报告,其中SUBSCRIBER_ID=MEMBERS中的ID。因此,对于Jane来说,它看起来像:
- 简
- 面包师
- 粉红的
- 猫
- 六月
Jane | Baker | Pink
Jane | Baker | Cats
Jane | Baker | June
而我正在寻找
Jane | Baker | Pink | Cats | June
我使用的是我知道是100%错误的以下输出:)
实际上,我正在寻找一些可以让我输出的东西,比如:
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Results:" . $row["ID"] . "|";
echo "" . $row["FIRSTNAME"] . "|";
echo "" . $row["LASTNAME"] . "|";
echo "" . $row["color"] . "|";
echo "" . $row["animal"] . "|";
echo "" . $row["month"] . "|";
}
干杯使用和
内部连接
SELECT ID, FIRSTNAME, LASTNAME, SUBSCRIBER_ID, FIELD_ID, FIELD_VALUE
FROM MEMBERS m
INNER JOIN DETAILS d ON m.ID = d.SUBSCRIBER_ID
您正在使用哪个数据库?如果是oracle,请尝试使用sys connect by path将所有三个详细信息按每人一行列出 查询应该如下所示
SELECT id,
firstname,
lastname,
Sys_connect_by_path(field_value, ',')
FROM members m,
details d
WHERE m.id = d.subscriber_id
START WITH id = 1
CONNECT BY PRIOR subscriber_id = id
ORDER BY id
基本上,您至少有3种选择:
内部连接
,并注意表示层中数据的格式设置(在您的例子中是PHP)。这种方法的主要优点是易于编写和维护,并且不需要对数据库进行任何更改李>
内部联接。
主要的好处是,您将只选择所需的数据,并且可以保留您的数据库设计
这种方法的主要缺点是需要更改数据库,但主要好处是一切都会变得更简单。
如果您保存的详细信息易于更改,请不要使用此选项(我的意思是,如果您希望继续添加/删除每个成员的详细信息)。如果是这种情况,那么使用第一个选项,因为它将是最简单的编写和维护方法
(实体-属性-价值模型)@我的答案对你有用吗?干杯,马特。这种格式的问题在于,它为每个字段_值显示一个新行。我将用我得到的结果更新我的原始问题。因此,您希望它像问题中一样显示,每行有一个单词吗?虽然可能与此问题无关,但请添加您正在使用的DBMS(Postgres、Oracle等)的标记,刚刚用首选显示结果更新了它。干杯,伙计。使用MySQL并用PHP呈现结果。
SELECT id,
firstname,
lastname,
Sys_connect_by_path(field_value, ',')
FROM members m,
details d
WHERE m.id = d.subscriber_id
START WITH id = 1
CONNECT BY PRIOR subscriber_id = id
ORDER BY id