我有两张桌子:
第一张表:
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
FIELD_ID表示成员的其他详细信息。即。
1 = Favorite color
2 = Favorite animal
3 = Favorite month
我想提交一份包含其主要信息的报告MEMBERS&来自DETAILS表的额外信息,其中SUBSCRIBER_ID =成员中的ID。所以对Jane来说,它看起来像是:
更新:
我使用了以下SQL语句并且我提取了我想要的数据,但显示不是我想要的:
选择 成员。, 的信息。 来自会员INNER JOIN的详细信息 ON members.id = details.subscriber_id 在哪里jos_osmembership_subscribers.id =' 29'
(纯粹将记录记录缩减为一个成员)。
我得到的结果是:
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["field_value"] . "|";
}
我真的在寻找能让我输出的东西:
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"] . "|";
}
干杯
答案 0 :(得分:1)
使用和INNER JOIN
SELECT ID, FIRSTNAME, LASTNAME, SUBSCRIBER_ID, FIELD_ID, FIELD_VALUE
FROM MEMBERS m
INNER JOIN DETAILS d ON m.ID = d.SUBSCRIBER_ID
答案 1 :(得分:0)
您使用的是哪个数据库?如果它将成为oracle,请尝试通过路径进行sys连接,以获得每人连续的所有三个细节 查询应该如下所示
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
答案 2 :(得分:0)
基本上,您至少有3个选项:
inner join
,并处理表示层(在您的情况下为PHP)中数据的格式。inner join
。read about dynamic pivot in mysql
read about when is it better to use EAV(实体 - 属性 - 值模型)