繁体   English   中英

SQL查询从特定列中共享相同值的行中提取字段值,并将这些值合并为一行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM