J'ai Jdatabase table
avoir les données de présence de tous mes étudiants.
EXEMPLE:
Je dois afficher la présence de tous les numéros de rôle pour la classe 3. Les enregistrements ayant 3 en attended_no
La colonne _ était présente et les enregistrements n’ayant pas 3 dans la attended_no
colonne étaient absents.
Cela devrait être la sortie:
ABC-12-21
Present
ABC-12-24
Present
ABC-12-29
Absent
ABC-12-37
Absent
ABC-12-42
Present
L'aide serait appréciée.
Je ne crois pas que vous ayez besoin d'utiliser 2 requêtes. essayez ce qui suit:
$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>';
De la même manière, vous devez composer une requête pour renvoyer les résultats souhaités. Quelque chose comme:
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
Au cas où vous souhaitiez renvoyer une UNION de vos requêtes précédentes, la procédure est encore plus simple:
Utilisation des méthodes d'union dans les requêtes de base de données https://docs.joomla.org/Using_the_union_methods_in_database_queries
Vous pouvez économiser beaucoup de code PHP en écrivant une clause SQL SELECT
raffinée avec une expression conditionnelle:
SELECT roll_num, IF(attended_no REGEXP '(^|,)3(,|$)', 'Present', 'Absent')
L'expression régulière vérifie que le 3
La valeur n'est jamais précédée ni suivie d'un autre numéro - de sorte que 13
et 39
ne sont jamais faussement appariés. Le motif regex correspondra correctement si le 3 est la première valeur, la dernière valeur ou la seule valeur de la chaîne séparée par des virgules.
Que signifie l'expression régulière? Je suis content que tu aies demandé ...
( #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
Lorsque vous voulez comprendre ce qu’est un motif ou tester des scénarios marginaux, envoyez-le à regex101.com et faites-le vous-même .