mysql查询结果在1行与GROUP_CONCAT?

dgiusagp  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(149)

我不是一个有经验的程序员,所以请你和我一起放松!我不确定我想要的是否可能。我可能需要提供更多的信息。
我们有一个简单的门票系统内置在一个Joomla网站,并正在改变到另一个平台。我需要从现有的网站提取数据到电子表格(历史/参考)。mysql数据库中有6个表的票据数据。
我可以输出所有这些数据,但是在查询遍历数据时,电子表格中会出现多行。2字段给我带来麻烦-消息和自定义字段-每个字段都生活在自己的表中,并带有它们所属的机票索引。消息就像票证中的对话,所以可能有1个或很多个。自定义字段因票据类型而异-每个字段都有一个标签和字段用于其数据-因此,如果有2条消息和3个自定义字段,我最终会有6行,如果有1和3,我最终会有3行等。从311现有的门票我有一个电子表格与3270结果-这是不可用的!我想在1行上结束每张票的所有数据。
我昨天发现了GROUP_CONCAT函数。这已经将输出减少到24行-与3270不同,但不正确,仍然无法使用!!发生的情况是,来自多个票证的消息被连接到输出中的单个单元格中,在该单元格中,我只需要连接的每个票证中的票证。我还想连接票据的自定义字段,但还没有看到这一部分。
这是我的SQL…

SELECT ROW_NUMBER() OVER (
    ORDER BY sgj4z_rsticketspro_tickets.id
    ) 'Row number',
    sgj4z_rsticketspro_tickets.id AS 'ID',
    DATE_FORMAT (sgj4z_rsticketspro_tickets.date,"%d/%m/%Y") AS 'Date raised',
    sgj4z_users.name AS 'Raised by',
    sgj4z_rsticketspro_tickets.code AS 'Code',
    sgj4z_rsticketspro_tickets.subject AS 'Subject',
    sgj4z_rsticketspro_statuses.name AS 'Status',
    sgj4z_rsticketspro_priorities.name AS 'Priority',
    GROUP_CONCAT(sgj4z_rsticketspro_ticket_messages.message SEPARATOR '  |  ') AS 'Messages',
    sgj4z_rsticketspro_custom_fields.label AS 'Custom field name',
    sgj4z_rsticketspro_custom_fields_values.value AS 'Value',
    DATE_FORMAT (sgj4z_rsticketspro_tickets.closed,"%d/%m/%Y") AS 'Date closed'
FROM
    (
    sgj4z_rsticketspro_tickets
    INNER JOIN sgj4z_users ON sgj4z_rsticketspro_tickets.customer_id = sgj4z_users.id
    INNER JOIN sgj4z_rsticketspro_statuses ON sgj4z_rsticketspro_tickets.status_id = sgj4z_rsticketspro_statuses.id
    INNER JOIN sgj4z_rsticketspro_priorities ON sgj4z_rsticketspro_tickets.priority_id = sgj4z_rsticketspro_priorities.id
    INNER JOIN sgj4z_rsticketspro_custom_fields_values ON sgj4z_rsticketspro_tickets.id = sgj4z_rsticketspro_custom_fields_values.ticket_id
    INNER JOIN sgj4z_rsticketspro_ticket_messages ON sgj4z_rsticketspro_tickets.id = sgj4z_rsticketspro_ticket_messages.ticket_id
    INNER JOIN sgj4z_rsticketspro_custom_fields ON sgj4z_rsticketspro_custom_fields_values.custom_field_id = sgj4z_rsticketspro_custom_fields.id
    )
WHERE NOT 
    (
    sgj4z_rsticketspro_ticket_messages.user_id = "-1"
    )
GROUP BY sgj4z_rsticketspro_custom_fields.label;

字符串
我可以让GROUP_CONCAT将每个票据的消息与其他票据分开连接吗?
谢了,尼吉

mlmc2os5

mlmc2os51#

而不是

INNER JOIN sgj4z_rsticketspro_ticket_messages ON sgj4z_rsticketspro_tickets.id =
        sgj4z_rsticketspro_ticket_messages.ticket_id`

字符串
你可以用

INNER JOIN (
    select 
        ticket_id
        , group_concat(message  SEPARATOR ' | ') as message
    from sgj4z_rsticketspro_ticket_messages
    group by ticket_id
) as ticketwise_messages ON 
sgj4z_rsticketspro_tickets.id =
        ticketwise_messages.ticket_id


并替换

GROUP_CONCAT(sgj4z_rsticketspro_ticket_messages.message SEPARATOR ' | ') AS 'Messages',


ticketwise_messages.message as 'Messages'


希望这对你有帮助。对自定义字段表也执行相同的操作。

相关问题