it-swarm.com.de

JDatenbank: Zählen der Anzahl der Elemente in einem durch Kommas getrennten Feld

Ich habe eine JdatabaseTabelle 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:

idcomma 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.

3
saibbyweb

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);
3
Lodder

Ihre Frage bezieht sich nicht speziell auf Joomla, und es ist nicht weit davon entfernt, wie ich sie empfehlen würde.

SQL Demo

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.

0
mickmackusa