Ich habe eine Datenbank von Hymnen Instanzen, wie sie in verschiedenen Gesangbüchern erscheinen. Die Tabelle ist ungefähr so aufgebaut:Wie kann ich "identische" Strings unterschiedlicher Länge gruppieren?
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);
Manchmal sind die ersten Zeilen gleich sind, aber an einer anderen Stelle abschneidet - und manchmal sind sie verschieden (die Buchstaben A und B sind nicht in der Datenbank , ich habe sie nur in gleichen und verschieden zu zeigen):
Oh, wie schön war der Morgen [A]
Oh, wie schön [A]
Oh, wie schön war die Morgen! Strahlender Strahl [A]
O wie schön war der Morgen! [B]
Ist es möglich, nur die längste Version der einzigartigen ersten Zeilen zurück, wie dies ?:
Oh, wie schön der Morgen war! Strahlender Strahl [A]
O wie schön war der Morgen! [B]
Hier ist die Abfrage, die ich bisher habe:
SELECT HyFirstLine
FROM Hymns
WHERE TextID = 26 AND HyFirstLine IS NOT NULL
GROUP BY HyFirstLine
EDIT: Die Daten werden als Liste der Wörterbücher zu Python zurückgegeben wird. Aufgrund der Kommentare ist es vielleicht besser, mit Python nachzufolgen? Ich bin mir nicht sicher, wie ich das machen würde. Hinzufügen des Python-Tags
Notwendigkeit Programm Schleife es zB PHP – SIDU
Mein Verdacht ist, dass Sie benötigen entweder eine benutzerdefinierte Funktion zu handhaben oder möglicherweise eine Sprache wie Java verwenden müssen. –
Haben Sie versucht, den Datensatz mit 'Cursor' oder' TempTable' zu durchlaufen? – Eduard