我想基于一个表和其他表创建高级搜索 我的桌子:
estate :
+------+-------------+-------------------+-------------------+
| id | title | cat_id | date |
+------+-------------+-------------------+-------------------+
| 1 | test1 | 1 | 1526793203 |
| 2 | test2 | 2 | 1526793203 |
| 3 | test3 | 3 | 1526793203 |
+------+--------------+------------------+-------------------+
estate_risk
+------+-------------+----------------+--------------+
| id | estate_id | title | consequence |
+------+-------------+----------------+--------------+
| 3 | 1 | risktitle1 | 123 |
| 4 | 1 | risktitle2 | 433 |
| 5 | 1 | risktitle3 | 523 |
| 6 | 2 | risktitle4 | 976 |
| 7 | 2 | risktitle5 | 422 |
| 8 | 3 | risktitle6 | 124 |
+------+-------------+----------------+--------------+
related_estate
+------+-------------+----------------+--------------+
| id | estate_id | title | storage |
+------+-------------+----------------+--------------+
| 3 | 1 | testdata | 1 |
| 4 | 1 | testdata2 | 2 |
| 5 | 1 | testdata3 | 3 |
| 6 | 2 | testdata4 | 4 |
| 7 | 2 | testdata5 | 5 |
| 8 | 5 | testdata6 | 6 |
+------+-------------+----------------+---------------+
还有其他一些表......(外来的所有表都是estate_id) 我希望连续获取所有数据,换句话说,例如,我在estate_risk表中有几个相关数据,当我使用连接查询时获取此结果数据:
示例查询一个连接:
SELECT R.id,R.title,C.title,C.storage FROM estate R LEFT JOIN estate_risk as C ON estate_risk .estate_id = R.id
结果:
----------+------------------+----------------+--------------+
R.id | R.title | C.title | C.consequence
----------+------------------+----------------+--------------+
1 | test1 | risktitle1 | 123 |
1 | test1 | risktitle2 | 433 |
1 | test1 | risktitle3 | 523 |
2 | test2 | risktitle4 | 976 |
2 | test2 | risktitle5 | 422 |
3 | test3 | risktitle6 | 124 |
----------+------------------+----------------+--------------+
一切都是正确的,但我希望获得连续的所有数据,这意味着只有一行R.id,所有C.title在一行中 我的主要目标是只显示一个包含所有其他数据表的页面搜索结果
+------+-------------+----------------+----------------+
id | estate_title| estate_risk | related_estate |
+------+-------------+----------------+----------------+
1 test1 risktitle1 testdata1
risktitle2 testdata2
risktitle3 testdata3
---------------------------------------------------------
2 ...
也许我的目标不对,但我不知道如何获得此输出这应该在数据库方面或编程方面完成? 在编程方面可以提出什么想法?
答案 0 :(得分:1)
看起来你想要的是一个GROUP_CONCAT来组合风险标题和related_estates。
GROUP_CONCAT(C.title SEPARATOR '\n'),
GROUP_CONCAT(Some_other_column SEPARATOR '\n')
一旦你拥有了你的小组功能,我相信由R.id作为Yanet建议分组并且数据应该正确地组合在一起。
如果你确实有更大的数据集,那么MySQL的串联功能就有局限性。因此,在这种情况下,您可能需要按原样返回数据,然后重新格式化以匹配您在PHP端所需的数据。