由于Ajax调用以我想要的方式格式化json对象时,我在格式化时遇到了问题。我也不知道我的方法是否是最好的方法。
解释一下情况:假设我在我的数据库中存储了人的姓名和身高以及他们最喜欢的颜色(可以是几种)。表格如下所示
persons:
+ id | name | height +
+++++++++++++++++++++++++++
| 1 | peter | 185 |
| 2 | paul | 176 |
colors:
+ id | color +
++++++++++++++++
| 1 | green |
| 2 | blue |
| 3 | yellow |
| 4 | red |
person_color:
+ id | id_person | id_color +
++++++++++++++++++++++++++++++
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 2 |
| 5 | 2 | 4 |
我通过像这样左连接表来获取所需的数据
SELECT id, name, height, colors.color
FROM persons
LEFT JOIN person_color
ON persons.id = person_color.id_person
LEFT JOIN colors
ON person_color.id_color = color.id
这一切都很好用。
然后我json_encode查询结果并将对象交还给脚本。
如果调用成功,我通过像这样遍历返回的对象创建一个 html 表
var html = "<table>";
$.each(msg) = function(key, val) {
html += "<tr>";
$.each(val) = function(key2, val2){
html += "<td>+val2+</td>";
}
html += "</tr>";
}
html += "</table>";
结果,这给了我这个表:
+ id | name | groesse | farbe +
+++++++++++++++++++++++++++++++++++++++++
| 1 | peter | 185 | green |
| 1 | peter | 185 | blue |
| 1 | peter | 185 | yellow |
| 2 | paul | 176 | blue |
| 2 | paul | 176 | red |
目前为止,一切都好。但我想要实现的是以这样的形式显示结果:
+ id + name + height + color +
+++++++++++++++++++++++++++++++++++++++++++++++++++++
| 1 | peter | 185 | green, blue, yellow |
| 2 | paul | 176 | blue, red |
应该不会太难,但我在兜圈子。.
我也不确定是要更改创建 html 表的脚本,还是有一种聪明的方法来更改 SQL 语句以正确的形式生成一些东西。
任何提示都将不胜感激!
提前感谢,帕克
mysql 中有GROUP_CONCAT
聚合函数:
SELECT id, name, height, GROUP_CONCAT(colors.color SEPARATOR ', ') as color
FROM persons
LEFT JOIN person_color
ON persons.id = person_color.id_person
LEFT JOIN colors
ON person_color.id_color = color.id
GROUP BY id