0
我有一个赞美诗实例的数据库,因为它们出现在各种赞美诗。 该表设置大致是这样的:如何GROUP BY“相同”的不同长度的字符串?
CREATE TABLE `Hymns` (
`HymnID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`HymnbookID` int(11) DEFAULT NULL,
`HyNumber` int(11) DEFAULT NULL,
`HyName` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`HyFirstLine` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`HyFirstLineDif` tinyint(1) NOT NULL DEFAULT '0',
`SongID` int(11) DEFAULT NULL,
`TextID` int(11) DEFAULT NULL,
`TuneID` int(11) DEFAULT NULL,
PRIMARY KEY (`HymnID`),
KEY `HymnbookID` (`HymnbookID`),
KEY `SongID` (`SongID`)
) ENGINE=MyISAM AUTO_INCREMENT=134381 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `Hymns` (`HymnID`, `HymnbookID`, `HyNumber`, `HyName`,
`HyFirstLine`, `HyFirstLineDif`, `SongID`, `TextID`, `TuneID`)
VALUES (642, 1, 26, 'Joseph Smith’s First Prayer',
'Oh, how lovely was the morning', 1, 26, 26, 26);
有时第一线是相同的,但在不同的地方切断 - 有时它们是不同的(字母A和B不存在于数据库,我只是把他们表现出相同和不同):
哦,多么可爱是早上[A]
哦,多么可爱[A]
啊,真漂亮是早上!辐射光束[A]
早上好可爱啊! [B]
是否有可能只返回唯一的第一线中最长的版本,这样?:
哦,多么可爱是早晨!辐射光束[A]
早上好可爱啊! [B]
这里的查询我到目前为止:
SELECT HyFirstLine
FROM Hymns
WHERE TextID = 26 AND HyFirstLine IS NOT NULL
GROUP BY HyFirstLine
编辑:将数据返回给Python作为词典列表。根据评论,也许最好用Python来过滤事实?我不知道我会如何去做这件事。添加Python标签。
需要程序循环就如PHP – SIDU
我怀疑的是,你要么需要一个用户定义的函数来处理这,或者可能需要使用像Java这样的语言。 –
您是否尝试过使用'Cursor'或'TempTable'迭代数据集? – Eduard