2 votes

Application d'une classe différente à des résultats datés différents

J'ai un tableau avec les données suivantes :

 ______________________
| Name |    Date       |
 ----------------------
| Bob  |  2016-09-16   |
| Ben  |  2016-10-03   |
| Sam  |  2016-10-03   |

En utilisant les éléments suivants :

SELECT 
case  
    when datediff( CURDATE(), `the_date`)  = 3 then '3 Days'
    when datediff( CURDATE(), `the_date`)  between 4 and 6 then '4-6 Days'
    when datediff( CURDATE(), `the_date`)  > 6 then  '7 or more days'
end as days,
sum( case  
    when datediff( CURDATE(), `the_date`)  <= 3 then 1 
    when datediff( CURDATE(), `the_date`)  between 4 and 6 then 1
    when datediff( CURDATE(), `the_date`)  > 6 then 1
else 0 
end  ) as tot 
FROM my_table 
GROUP BY
case  
    when datediff( CURDATE(), `the_date`)  <= 3 then '3 Days'
    when datediff( CURDATE(), `the_date`)  between 4 and 6 then '4-6 Days'
    when datediff( CURDATE(),`the_date`) > 6 then  '7 or more days'
end ;   

et en utilisant ensuite

echo '<p>'.$row['tot'].'</p>';

J'obtiens les résultats suivants en triant mes lignes selon qu'elles datent de moins de 3 jours, de 4 à 6 jours ou de plus de 7 jours.

1
2

Idéalement, j'aimerais appliquer une classe aux balises p, par exemple class="urgent" pour les balises datant de plus de 7 jours, orange pour les balises datant de 4 à 6 jours et vertes pour les balises datant de moins de 3 jours. J'aimerais ensuite entourer le numéro d'un texte unique tel que "Il est urgent de répondre à résultat application"

2voto

Bill Karwin Points 204877

Je testerais le résultat des données pour la valeur que vous recherchez, et j'attribuerais conditionnellement un nom de classe en fonction de la valeur.

if ($row['days'] == '7 or more days') {
    $css_class = 'urgent';
} else {
    $css_class = 'normal';
}

printf("<p class='%s'>%s</p>", $css_class, $row['tot']);

Je voudrais pas recommande de coder en dur le nom de votre classe css dans votre requête. Ne mélangez pas vos requêtes de base de données avec votre couche de présentation, cela ne fera que créer de la confusion et un couplage inapproprié dans votre code.

0voto

scaisEdge Points 87483

Vous pourriez ajouter une colonne )my_class) dans votre requête et ajouter le résultat dans votre balise p

SELECT 
case  
    when datediff( CURDATE(), `the_date`)  = 3 then '3 Days'
    when datediff( CURDATE(), `the_date`)  between 4 and 6 then '4-6 Days'
    when datediff( CURDATE(), `the_date`)  > 6 then  '7 or more days'
end as days,
sum( case  
    when datediff( CURDATE(), `the_date`)  <= 3 then 1 
    when datediff( CURDATE(), `the_date`)  between 4 and 6 then 1
    when datediff( CURDATE(), `the_date`)  > 6 then 1
else 0 
end  ) as tot ,
case  
    when datediff( CURDATE(), `the_date`)  = 3 then 'green'
    when datediff( CURDATE(), `the_date`)  between 4 and 6 then 'orange'
    when datediff( CURDATE(), `the_date`)  > 6 then  'red'
end as my_class 

FROM my_table 
GROUP BY
case  
    when datediff( CURDATE(), `the_date`)  <= 3 then '3 Days'
    when datediff( CURDATE(), `the_date`)  between 4 and 6 then '4-6 Days'
    when datediff( CURDATE(),`the_date`) > 6 then  '7 or more days'
end ;  

echo '<p  class="'. $row['my_class'] . '" >'.$row['tot'].'</p>'; your query with the proper class a

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X