我在查询时遇到了困难 我有一个如下所示的客户数据库
客户
- 身份证
- 创建时间
字段
- 姓名
- 唯一ID
字段内容
- FieldUniqID
- 值(value)
- 客户 ID
最后我想制作一个看起来像这样的表格
- Customer.ID 作为 CustomerID
- Field.Name 作为名字
- Field.Name 作为姓氏
- 字段名称作为电子邮件
- Field.Name 作为电话
- 客户.按创建时创建
希望你能帮我找出如何做
正如你所见,我使用 php 编写了它:
$this->db->query('SET SESSION group_concat_max_len=10000000');
$q = $this->db->select("GROUP_CONCAT(fieldsContent.Content SEPARATOR '|*|') AS Content,
GROUP_CONCAT(fieldsContent.FieldID SEPARATOR '|*|') AS FieldID,
customers.Created,
customers.ID",false)
->from('customers')
->join('fieldsContent','fieldsContent.TypeID = customers.ID','left outer')
->where(array('fieldsContent.TypeName' => 'customers',
'customers.ID' => $id))
->group_by('fieldsContent.TypeID')
->order_by('customers.Created','DESC')
->get();
foreach($q->result() as $d){
$field = explode('|*|',$d->FieldID);
$content = explode('|*|',$d->Content);
foreach($field as $k => $FieldID){
$dd[$FieldID] = $content[$k];
}
}
但我只需要sql而不使用php
最佳答案
也许像下面这样?
SET SESSION group_concat_max_len=10000000;
CREATE VIEW <view_name> AS
(
SELECT group_concat(fieldscontent.content separator '|*|') AS content,
group_concat(fieldscontent.fieldid separator '|*|') AS fieldid,
customers.created
FROM customers
LEFT JOIN fieldscontent
ON fieldscontent.typeid = customers.id
GROUP BY fieldscontent.typeid
ORDER BY customers.created DESC
)
然后你就可以过滤 View 了!
关于mysql - 选择列作为行并对结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26919544/