【发布时间】:2018-11-02 16:05:55
【问题描述】:
我想创建一个基于一个表和其他表的高级搜索 我的桌子:
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 ...
也许我的目标不正确,但我不知道如何获得这个输出这应该在数据库端还是编程端完成? 在编程方面可以提出什么想法?
【问题讨论】:
-
在编程方面,您可以按 R.id 进行分组,例如,如果您需要在报告中显示它们
-
这绝对不是数据库端要做的事情。获取数据库以获取您的记录,并使用您的显示/用户界面以您希望的方式显示数据。另外,我相信您的示例 SQL 语句中的
GROUP BY r.id是个坏主意。 -
当按 R.id 添加 Group By R.id 时只从 Estate_risk 得到一个结果,例如: risktitle1 但我需要 risktitle1,risktitle2,risktitle3 结果
标签: php mysql sql database laravel-5