web-dev-qa-db-ja.com

Jdatabase:2つの選択をソートしますか?

Jdatabase tableにはすべての生徒の出席データがあります。

例:

table

クラス3のすべてのロール番号の出席を表示する必要があります。attended_no列に3を持つレコードは存在し、attended_no列に3を持たないレコードはありませんでした。

これは出力されるはずです:

ABC-12-21Present

ABC-12-24Present

ABC-12-29Absent

ABC-12-37Absent

ABC-12-42Present

助けていただければ幸いです。

3
saibbyweb

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>';
4
Lodder

同様に、必要な結果を返すクエリを作成する必要があります。何かのようなもの:

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

1
Anibal

条件式で洗練されたsql SELECT句を記述することにより、多くのphpコードの肥大化を回避できます。

SELECT roll_num, IF(attended_no REGEXP '(^|,)3(,|$)', 'Present', 'Absent')

SQLデモ

正規表現は、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にフィードして自分でスキルアップ

0
mickmackusa