2010-11-14 4 views
0

J'utilise une clause if pour extraire la valeur de mes données de table mysql car mon schéma de table n'est pas normal.Problème lors de l'extraction à partir de la table mysql compliquée

dès maintenant pour obtenir ces valeurs, j'ai écrit le code ci-dessous:

$result = $db->sql_query("SELECT type, var, count from table_counter"); 
    while ($row = $db->sql_fetchrow($result)) { 
    $type = $row['type']; 
    $var = $row['var']; 
    $count = intval($row['count']); 
     if(($type == "total") && ($var == "visits")) { 
      $totalVisits= $count; 
     }elseif(($type == "total") && ($var == "pageviews")) { 
      $totalPVisits= $count; 
     } 
    } 

est-il un autre moyen plutôt que d'utiliser une clause if ?!

Répondre

0

Que voulez-vous faire avec les données? Juste créer les comptes?

Vous pouvez extraire les données dans plusieurs requêtes.

Une autre option consiste à placer les données dans un tableau, puis de les trier en utilisant les fonctions de tri des tableaux PHP. Il pourrait ensuite être divisé en deux tableaux séparés, si nécessaire.

1
SELECT `type`, `var`, SUM(`count`) AS `sum` 
FROM table_counter 
GROUP BY `type`,`var`; 

Il n'y a pas besoin que intval() pour convertir le champ count en nombre entier. Il est déjà défini comme un entier dans votre table MySQL.

+0

un bon ami –

0

Vous devrez faire pivoter les données. Et cela vous demandera d'écrire du code pour analyser ce dont vous avez besoin en php et mysql. Cela peut devenir lourd en fonction de la quantité de données que vous voulez et comment il est stocké et comment il doit être récupéré. En fonction du texte de votre question, il semble que vous stockez des données très simples, mais pour chaque type et ensemble de données que vous stockez, vous devrez créer une logique pour cela. Donc, si vous savez exactement ce que les variables vont être, vous pouvez mettre en place et le tableau des noms de variables que vous voulez définir et faire une boucle à travers eux.

$legal_values = array('visits', 'pageviews', etc...); 
while ($row = $db->sql_fetchrow($result)) { 
    if (in_array($row['var'], $legal_values)) { 
     $$row['var'] = $intval($row['count']; 
    } 
} 

Ceci est juste un exemple simple et ne fonctionne que si tous les types sont comptés. Évidemment, si vous voulez le filtrer, vous aurez besoin de plus de logique. Il n'y a pas vraiment de solution fourre-tout pour ce genre de choses, il s'agit donc d'écrire quelque chose de simple pour que vous le compreniez et vous pouvez facilement l'étendre pour gérer plus de données dont vous pourriez avoir besoin plus tard.

0
${$row['type'] . ucfirst($row['var'])} = $row['count']; 

qui lit total pageviews 107-$totalPageviews = 107. Selon l'endroit où vous voulez l'utiliser, cela peut être une possibilité.

Questions connexes