我不是一个经验丰富的程序员,所以请慢慢来!而且我不确定我想要的是否可能。我可能需要提供更多信息。
我们在 Joomla 网站上内置了一个简单的票务系统,并且正在更改为另一个平台。我需要从现有站点将数据提取到电子表格中(以供历史记录/参考)。 mysql 数据库有 6 个表的票证数据。
我可以输出所有这些数据,但当查询迭代数据时,我的电子表格中最终会出现多行。 2 个字段给我带来了麻烦 - 消息和自定义字段 - 每个字段都位于自己的表中,并带有它们所属票证的索引。消息就像工单中的对话,因此可能有 1 条或很多条。自定义字段因工单类型而异 - 每个字段都有一个标签和数据字段 - 因此,如果有 2 条消息和 3 个自定义字段,我最终会得到 6 行,如果有 1 和 3 行,我最终会得到 3 行,等等。来自 311现有门票 我有一个包含 3270 个结果的电子表格 - 无法使用!我想最终获得第一行中每张票的所有数据。
我昨天发现了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 将每张票证的消息与其他票证分开连接 - 如何?
谢谢尼格
而不是
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'
希望这有帮助。对自定义字段表也执行相同的操作。