![](/img/trans.png)
[英]Combine multiple rows into one row MySQL and split value from one field to two in same Query
[英]SQL query to extract field values from rows sharing same value in specific column, and combine those value into a single row
我正在尝试从Joomla的Joomfish MySQL数据库表中导出翻译后的内容。
Joomfish的工作方式是分别翻译字段并将其存储在jos_jf_content表中,该表具有对jos_content表中原始源内容的引用ID。 例如,一行可以保存翻译的标题,另一行可以保存翻译的类别,另一行可以保存全文内容。 这些行是分开的,并且仅共享reference_id值。
因此,有一个jos_jf_content表,其中感兴趣的列是:
reference_id(来源ID)| reference_field(title |全文| metadesc)| 价值(翻译)
我需要将共享相同reference_id的所有值组合到单行中,其列为Title,Fulltext,Metadesc等。
有什么提示吗?
更新:
原始表格如下:
|reference_id| reference_field | value |
10 title A title
10 fulltext Body of post
我需要将其(CSV等)导出为:
| ID | TITLE | FULLTEXT |
| 10 | A Title | Body of post |
您可以使用Mysql GROUP_CONCAT(),因此查询看起来像
SELECT group_concat(column_name) FROM table where reference_id = 'rid'
假设用于保存这些信息的列名相同。 如果不是,请粘贴您的表结构。 如果它们存储在不同的列中,则也可以使用concat。
我认为接下来的查询符合目标。 感谢Bill Purchase提供了类似情况的链接。 (请注意,我最终只需要介绍文字,而不需要全文)
SELECT DISTINCT jf.reference_id
, t.value AS title
, it.value AS introtext
, mk.value AS metakey
, md.value AS metadesc
FROM jos_jf_content AS jf
LEFT JOIN jos_jf_content AS t ON jf.reference_id = t.reference_id
AND t.reference_field = 'title' AND t.reference_table='content'
LEFT JOIN jos_jf_content AS it ON jf.reference_id = it.reference_id
AND it.reference_field = 'introtext' AND it.reference_table='content'
LEFT JOIN jos_jf_content AS mk ON jf.reference_id = mk.reference_id
AND mk.reference_field = 'metakey' AND mk.reference_table='content'
LEFT JOIN jos_jf_content AS md ON jf.reference_id = md.reference_id
AND md.reference_field = 'metadesc' AND md.reference_table='content'
WHERE jf.reference_table='content'
ORDER BY jf.reference_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.