カンマ区切りフィールドを持つJdatabase
tableがあります。カンマで区切られた要素の数を数えるには(Joomlaコーディング標準に従ってに従って)最良の方法は何でしょうか。以下の場合のように:
id
comma separated values
01
(2,5,6,7,8,9,21,24,28)
返されるはずです:9
私が間違っていなければ、mysql
を使用してそれを達成する方法の1つは次のようになります。
SELECT (LENGTH(column_name) - LENGTH(REPLACE(column_name,",","")) + 1) AS MyColumnCounts
FROM table_name;
しかし、これは最善の方法ですか?
助けていただければ幸いです。
1つのアプローチは次のようになります。
$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();
次に、次のように結果を配列に分解します。
$array = explode(',', $result);
次に、次のように配列の項目を数えます:
$count = count($array);
あなたの質問は特にJoomlaに関するものではなく、私がそれを行うことをお勧めする方法から遠くありません。
_SELECT SUM(CHAR_LENGTH(csv) - CHAR_LENGTH(REPLACE(csv, ',', '')) + 1) AS num_of_commas
_
CHAR_LENGTH()
は、LENGTH()
と比べて信頼性が少し高くなっています。 LENGTH()
でマルチバイト文字を処理しようとすると、誤った結果が生成されます。
もちろん、Joomla select()
メソッド呼び出しに変換された生のクエリを確認したい場合、変更することはあまりありません。
_$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"));
_
Table_name/column_nameの値にスペースが含まれておらず、MySQLの予約キーワードではなく、信頼できないソースから提供されていない(ユーザーが送信した)場合は、$db->qn()
呼び出しを安全に省略できます。