我正在使用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
子句吗?!
答案 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
。根据您想要使用它的位置,这可能是可能的。