gpt4 book ai didi

mysql - 连接列,然后将它们分组在 MySQL 的特定范围内

转载 作者:行者123 更新时间:2023-11-30 22:41:56 25 4
gpt4 key购买 nike

我的 MySQL 问题需要一些帮助。我正在尝试连接两列,然后将结果插入到一个临时列中。但是,连接的行应该根据范围在临时列中进行分组。我对任何建议持开放态度,因为我的 mysql 经验有限。这就是我所拥有的;

现状

  • 我有两张 table

一个包含单独的圣经经文;

CREATE temporary TABLE `bible_text_temp` (
`text_id` int(11) NOT NULL AUTO_INCREMENT,
`book_index` varchar(50) NOT NULL DEFAULT '0',
`chapter` int(11) NOT NULL DEFAULT '0',
`verse` int(11) NOT NULL DEFAULT '0',
`verse_text` varchar(8000) NOT NULL DEFAULT '0',
`version_id` int(11) NOT NULL DEFAULT '0',
`life_verse_id` int(11) DEFAULT NULL,
`verse_html` varchar(50) DEFAULT NULL,PRIMARY KEY (`text_id`),UNIQUE KEY `text_id_UNIQUE` (`text_id`))

另一个表有特定类别的经文编号。例如。该表包含与爱相关的所有经文编号;

CREATE TABLE `final_verse_import` (`id` int(11) NOT NULL AUTO_INCREMENT, `book_index` varchar(500) NOT NULL, `chapter` int(11) NOT NULL, `verse_from` int(11) NOT NULL, `verse_to` int(11) DEFAULT NULL, `life_category` varchar(250) DEFAULT NULL,`life_tag_1` varchar(250) DEFAULT NULL,`life_tag_2` varchar(250) DEFAULT NULL,`verses` varchar(5000) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2047 DEFAULT CHARSET=latin1;
  • 我正在尝试连接 verse_htmlverse_text bible_text_temp 中的列表作为经文并将其插入另一个名为 hold_verses 的临时表中通过加入 final_verse_import使用以下查询

    INSERT INTO hold_verses (book_index, chapter, verse_from, verse_to, verses)
    SELECT a.book_index, a.chapter, b.verse_from, b.verse_to, GROUP_CONCAT(DISTINCT a.verse_html, a.verse_text SEPARATOR ' ') AS verses
    FROM bible_text_temp a
    INNER JOIN final_verse_import b
    ON a.book_index = b.book_index
    AND a.chapter = b.chapter
    AND a.verse = b.verse_from
    AND a.version_id = 3
    GROUP BY id
  • 如果我只想要 final_verse_import 中每一行的第一节,上述查询似乎工作正常 table 。这意味着我得到了正确的 CONCAT hold_verses 中每一行的值基于 verse_from 的表格final_verse_import 中的列如果我只想返回 CONCAT 中的一节经文专栏

  • 但是,final_verse_import 中的某些行由不止一节经文组成。例如,关于爱的圣经经文可以包含多个经文,例如 romans 4: 2 - 4 (多节经文)而不仅仅是 romans 4:2 (单节)。为了适应这一点,我在 final_verse_import 中有另一列表名为 verse_to .如果填充此列,则类别诗句行将有多个诗句。如果它没有填充 ( NULL ) 则只有一节经文。例如。对于 romans 4:2 -4 verse_from将是 2 verse_to 将是 4 .请注意,类别诗句是从 2 到 4 之间的所有内容,因此它将是第 2 节、第 3 节、第 4 节。
  • 我想根据 verse_from 返回类别诗句行的所有诗句和 verse_to作为 CONCAT hold_verses.verses 中的值列而不仅仅是第一节 ( verse_from )。因此,上面的查询将不起作用,因为它只为每个类别经文行返回一节经文。

问题

  1. 如何修改查询以返回 verse_from 之间的所有经文和 verse_to作为 CONCAT 值而不仅仅是 verse_to值(value)?我正在尝试使用以下内容; AND a.verse BETWEEN b.verse_from AND b.verse_toWHERE子句,但它似乎忽略了所有具有 final_verse_import.verse_to 的行= NULL .
  2. 如何包含具有 final.verse_import.verse_to 的结果= NULL ?有的类诗只有一节,我也需要归还。
  3. 如何对 CONCAT 的列表进行排序hold_verses.verses 中的诗句栏目顺序ASC ?当前,当我使用 BETWEEN 语句时,具有多个经文的行未按顺序显示。例如。如果我返回 CONCAT诗歌的值(value) romans 4: 2 -4结果将列为 CONCAT 中的第 2 节、第 4 节、第 3 节。专栏,而不是第 2 节、第 3 节、第 4 节。我意识到我的查询可能是错误的,所以如果我使用正确的查询,这可能会得到修复。

如果我的问题和描述不清楚,请提前致歉。我有一个让事情变得过于复杂的习惯 :)

最佳答案

在使用数据的应用程序中执行此操作可能更容易。换句话说,不是试图将所有内容集中到数据库中的单个字符串中,而是让调用应用程序选择多行,然后遍历这些行并操作其中的数据。

关于mysql - 连接列,然后将它们分组在 MySQL 的特定范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com