2010-06-17 7 views
2

Je peux penser à un certain nombre de façons de le faire en PHP ou même JavaScript, mais je me demande s'il y a une technique basée sur SQL que je néglige.mettre en évidence les valeurs de données dans un ensemble de résultats SQL

J'ai une table de base de données, disons 20 champs X 10 lignes. Je souhaite afficher la totalité de la table sur une page Web. Je ferais donc quelque chose comme SELCT * FROM data_table;, puis formaterai le jeu de résultats à l'aide de balises de tableau HTML.

Cependant, je voudrais également mettre en évidence les valeurs dans le tableau en fonction de savoir si elles sont la valeur maximale ou minimale dans leur colonne. Par exemple, j'ajouterais des balises en gras autour du maximum dans chaque colonne. Une table résultant pourrait ressembler à quelque chose comme ça, avec des balises gras montrées:

id | field1 | field2 | field3 | ... 
0 | 5  | 2  | <b>7</b> | ... 
1 | 3  | <b>8</b> | 6  | ... 
2 | <b>9</b> | 5  | 1  | ... 
... 

que je pouvais faire une SELECT séparée avec un ORDER BY pour chaque champ, puis interpréter les résultats, mais qui semble comme beaucoup d'accès supplémentaire DB.

Mon alternative en ce moment est simplement de récupérer la table entière, puis de trier/rechercher les valeurs de surbrillance en utilisant PHP.

Y at-il une meilleure façon?

Répondre

2

Ce ne est pas assez, mais il va faire exactement ce que vous demandez:

SELECT 
    (CASE field1 
     WHEN (SELECT MAX(field1) FROM data_table) 
     THEN CONCAT('<b>',field1,'</b>') 
     ELSE field1 
    END) as field1, 
    (CASE field2 
     WHEN (SELECT MAX(field2) FROM data_table) 
     THEN CONCAT('<b>',field2,'</b>') 
     ELSE field2 
    END) as field2 
FROM data_table 

... répéter pour d'autres colonnes

+0

intéressants , Merci. Je n'avais pas considéré ce genre de requête, mais cela semble bien et évite définitivement d'avoir à faire plusieurs requêtes. Est-ce qu'il est logique de faire ce genre de chose dans SQL vice post-traitement en PHP? – potatoe

+0

Je dirais que cela dépend de la quantité et de la complexité des données. Si vos données sont simples (par exemple toutes dans une table), SQL serait probablement l'option la plus rapide, quelle que soit la quantité de données, du moins lorsque les tables en question sont correctement indexées. Toutefois, si les données sont complexes, les requêtes SQL comme celle-ci avec plusieurs sous-requêtes pourraient facilement prendre une éternité à terminer. Vous pouvez ensuite utiliser SQL uniquement pour réduire cette complexité, puis traiter les données dans un processus distinct. Je n'utilise jamais moi-même SQL pour ajouter du code HTML, mais c'est juste moi ... –

0

La meilleure façon que je peux penser:

$rowCount = 0; 
$colorOne = '#ffffff'; 
$colorTwo = '#f3f3f3'; 

while($row = mysql_fetch_array($result)){ 
     $rowColor = ($rowCount % 2) ? $colorOne : $colorTwo; 
     echo "<tag bgcolor='$rowColor'></tag>"; 
$rowCount++; 
} 
Questions connexes