Ich habe eine Jdatabase
Tabelle mit einem durch Kommas getrennten Feld . Was wäre der beste Weg (gemäß Joomla-Codierungsstandards), um die Anzahl der durch Kommas getrennten Elemente zu zählen? Wie im folgenden Fall:
id
comma separated values
01
(2,5,6,7,8,9,21,24,28)
Es sollte zurückgeben: 9
Wenn ich mich nicht irre, wäre eine der Möglichkeiten, dies mit mysql
zu erreichen, folgende:
SELECT (LENGTH(column_name) - LENGTH(REPLACE(column_name,",","")) + 1) AS MyColumnCounts
FROM table_name;
Aber ist das der beste Weg?
Hilfe wäre dankbar.
Ein Ansatz wäre der folgende:
$db = JFactory::getDbo();
$id = 20; // Example ID
$query = $db->getQuery(true);
$query->select($db->qn('roll_no'))
->from($db->qn('#__table_name'))
->where($db->qn('Id') . ' = '. $id);
$db->setQuery($query);
$result = $db->loadResult();
Zerlegen Sie dann das Ergebnis in ein Array wie folgt:
$array = explode(',', $result);
Zählen Sie dann die Elemente im Array wie folgt:
$count = count($array);
Ihre Frage bezieht sich nicht speziell auf Joomla, und es ist nicht weit davon entfernt, wie ich sie empfehlen würde.
SELECT SUM(CHAR_LENGTH(csv) - CHAR_LENGTH(REPLACE(csv, ',', '')) + 1) AS num_of_commas
CHAR_LENGTH()
ist etwas zuverlässiger als LENGTH()
. Wenn/Wenn Sie versuchen, Mehrbyte-Zeichen mit LENGTH()
zu verarbeiten, werden falsche Ergebnisse generiert.
Wenn Sie möchten, dass die unformatierte Abfrage in einen Joomla select()
-Methodenaufruf übersetzt wird, müssen Sie natürlich nicht viel ändern:
$query = $db->getQuery(true)
->select("SUM(CHAR_LENGTH(" . $db->qn("column_name") . " - CHAR_LENGTH(REPLACE(" . $db->qn("column_name") . ", ',', '')) + 1) AS MyColumnCounts")
->from($db->qn("table_name"));
Wenn Ihre Werte für tabellenname/spaltenname kein Leerzeichen enthalten, keine von MySQL reservierten Schlüsselwörter sind und nicht aus nicht vertrauenswürdigen Quellen stammen (vom Benutzer übermittelt), können Sie die $db->qn()
-Aufrufe sicher auslassen.