【发布时间】:2020-08-23 06:32:59
【问题描述】:
我的表结构是
TABLE_1
|------|------|-------|
| ID | NAME | PHONE | = 1 ROW
|------|------|-------|
TABLE_2
|------|------------|----------|
| ID | TABLE_1_ID | CATEGORY | = 5 ROW
|------|------------|----------|
TABLE_3
|------|------------|----------|
| ID | TABLE_1_ID | ADDRESS | = 3 ROW
|------|------------|----------|
我正在使用上表。但我的结果生成 1 行,但在 CATEGORY 单元格中显示 5 CATEGORY 但它重复 3 次,在 ADDRESS 单元格中,3 个地址重复 5 次,如下所示 -
RESULT
|----|------|-------|----------------------------|------------------|
| | | | | (ADR1,ADR2,ADR3) |
| | | | (CAT1,CAT2,CAT3,CAT4,CAT5) | (ADR1,ADR2,ADR3) |
| ID | NAME | PHONE | (CAT1,CAT2,CAT3,CAT4,CAT5) | (ADR1,ADR2,ADR3) |
| | | | (CAT1,CAT2,CAT3,CAT4,CAT5) | (ADR1,ADR2,ADR3) |
| | | | | (ADR1,ADR2,ADR3) |
|----|------|-------|----------------------------|------------------|
我的 PHP+SQL 是
$db = new Database;
$getData = "SELECT a.name, a.phone, b.category, c.address
FROM table_1 a JOIN table_2 b JOIN table_3 c
WHERE a.id = b.table_1_id AND a.id = c.table_1_id
ORDER BY a.id ASC";
$execute = $db->select($getData);
$result = [];
$currentParent = false;
$data = null;
foreach ($execute as $row) {
if ($currentParent != $row['id']) {
if($data != null){
$result[]= $data;
}
$data = [
'name' => $row['name'],
'phone' => $row['phone'],
'category' => '',
'address' => ''
];
$currentParent = $row['id'];
}
$data['category'] = empty($data['category']) ? $row['category'] : $data['category'] .", ". $row['category'];
$data['address'] = empty($data['address']) ? $row['address'] : $data['address'] .", ". $row['address'];
}
$result[]= $data;
echo json_encode($result);
现在的问题是,我将如何在结果中实现 1 组 5 个类别和 1 组 3 个地址。提前致谢。
我的数据
TABLE_1 DATA
|------|------|-------|
| ID | NAME | PHONE |
|------|------|-------|
| 1 | JON | 123 |
|------|------|-------|
TABLE_2 DATA
|------|------------|----------|
| ID | TABLE_1_ID | CATEGORY |
|------|------------|----------|
| 1 | 1 | CAT1 |
|------|------------|----------|
| 2 | 1 | CAT2 |
|------|------------|----------|
| 3 | 1 | CAT3 |
|------|------------|----------|
| 4 | 1 | CAT4 |
|------|------------|----------|
| 5 | 1 | CAT5 |
|------|------------|----------|
TABLE_3 DATA
|------|------------|----------|
| ID | TABLE_1_ID | ADDRESS |
|------|------------|----------|
| 1 | 1 | ADR1 |
|------|------------|----------|
| 2 | 1 | ADR2 |
|------|------------|----------|
| 3 | 1 | ADR3 |
|------|------------|----------|
我对@987654325@的新查询
SELECT a.id, a.name, a.phone,
GROUP_CONCAT(b.category ORDER BY b.category SEPARATOR ',') category,
GROUP_CONCAT(c.address ORDER BY c.address SEPARATOR ',') address
FROM table_1 a INNER JOIN table_2 b ON (a.id = b.table_1_id) INNER JOIN table_3 c ON (a.id = c.table_1_id)
GROUP BY a.id, a.name, a.phone
这个查询也产生同样的结果,我的 PHP 和上面的一样。
【问题讨论】:
-
我不确定你期待什么输出
-
如果您正在使用连接(并且应该),您还应该通过包含 ON 子句来正确使用它们..
-
我用我的表格数据更新了我的问题。