Jdatabase table
にはすべての生徒の出席データがあります。
例:
クラス3のすべてのロール番号の出席を表示する必要があります。attended_no
列に3を持つレコードは存在し、attended_no
列に3を持たないレコードはありませんでした。
これは出力されるはずです:
ABC-12-21
Present
ABC-12-24
Present
ABC-12-29
Absent
ABC-12-37
Absent
ABC-12-42
Present
助けていただければ幸いです。
2つのクエリを使用する必要があるとは思いません。以下を試してください:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select(array('roll_no', 'attended_no'))
->from($db->qn('#__attendance'))
->order('roll_no ASC');
$db->setQuery($query);
$results = $db->loadObjectList();
echo '<ul>';
foreach ($results as $row)
{
$array = explode(',', $row->attendance_no); // convert commas to array
$flag = in_array(3, $array); //check if '3' in in the array
if ($flag == null)
{
$flag='absent';
}
else
{
$flag='present';
}
echo '<li>' . $row->roll_no . ' : ' . $flag . '</li>';
}
echo '</ul>';
同様に、必要な結果を返すクエリを作成する必要があります。何かのようなもの:
SELECT P.roll_num+A.roll_num FROM PRESENT P, ABSENT A
WHERE
P.subject_co = A.subject_co AND P.flag = 1 AND A.flag = 0
ORDER BY P.subject_co
以前のクエリのUNIONを返す場合は、さらに簡単です。
データベースクエリでのユニオンメソッドの使用https://docs.joomla.org/Using_the_union_methods_in_database_queries
条件式で洗練されたsql SELECT
句を記述することにより、多くのphpコードの肥大化を回避できます。
SELECT roll_num, IF(attended_no REGEXP '(^|,)3(,|$)', 'Present', 'Absent')
正規表現は、3
値の前または後に別の数値が続くことはないため、13
および39
が誤って一致することはありません。 3が最初の値、最後の値、またはカンマ区切りの文字列の唯一の値である場合、正規表現パターンは正しく一致します。
正規表現はどういう意味ですか?よろしくお願いします...
( #start of capture group 1
^ #match the start position of the input string
| #or
, #match a comma
) #end of capture group 1
3 #match the literal digit 3
( #start of capture group 2
, #match a comma
| #or
$ #match the end position of the input string
) #end of capture group 2
パターンが何をしているかを理解したい場合、またはいくつかのフリンジシナリオをテストしたい場合は、 regex101.comにフィードして自分でスキルアップ 。