从复杂的mysql表中获取问题

时间:2010-11-14 13:19:52

标签: php mysql

我正在使用if子句来获取mysql表数据的值,因为我的表模式不正常。

现在为了获得这些值,我写了下面的代码:

 $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;
        }
     }

还有其他方法,而不是使用if子句吗?!

5 个答案:

答案 0 :(得分:1)

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

intval()无需将count字段转换为整数。它已经在MySQL表中定义为整数。

答案 1 :(得分:0)

你在这里有一些EAV data structure,if是从中获取的常用方法。还有其他pivoting方式。

答案 2 :(得分:0)

您打算如何处理数据?只需创建计数?

您可以在多个查询中提取数据。

另一种选择是将数据放入数组中,然后使用PHP数组排序函数对其进行排序。如果需要,它可以分成两个独立的数组。

答案 3 :(得分:0)

您需要转动数据。这需要你编写一些代码来解析你在php和mysql中需要的东西。根据您想要的数据量以及存储方式以及需要检索的方式,这可能会变得很重。根据您的问题文本,它看起来存储的是非常简单的数据,但是对于您存储的每种类型和数据集,您都需要为它创建逻辑。

Soooo,如果你确切知道变量是什么,你可以设置你想要设置的变量名和数组并循环它们。

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

这只是一个简单的例子,只有在所有类型都有计数的情况下才有效。显然,如果你想过滤它,你需要更多的逻辑。对于这些东西并没有真正的全能解决方案,所以它归结为编写一些简单的东西,以便您理解它,并且您可以轻松地扩展它以处理您以后可能需要的更多数据。

答案 4 :(得分:0)

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

total pageviews 107读取为$totalPageviews = 107。根据您想要使用它的位置,这可能是可能的。