尝试使用google table charts可视化某些数据时遇到问题。我的数据源是mysql db,而用于连接到数据库并获取数据的php代码是standard php code(请参阅示例/部分,名为“ PHP-PDO-JSON-MySQL-Google”)。 mysql db和php均在VPS上运行。当我在查询中使用LIMIT时,会出现奇怪的行为。具体来说,只有当LIMIT x的x <= 5时,我才能显示表格:
确定
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
actions.click(item)
actions.perform()
不好
$result_RTI_VS_W_TABLE = $conn->query("SELECT * FROM `video_series_rank_week` ORDER BY `Year` DESC, `WeekN` DESC, `Rank` ASC LIMIT 5");
请注意,使用LIMIT 8的查询可以在phpmyadmin上正常工作。因此,数据存在。在一些实验中,我还注意到带有不同LIMIT语句以可视化google line charts的查询似乎可以正常工作。在我看来,这应该是表格图表而不是查询的问题。另外,相同的代码也可以在我的旧VPS上运行。
有什么主意为什么我得到这个奇怪的输出?
代码:
$result_RTI_VS_W_TABLE = $conn->query("SELECT * FROM `video_series_rank_week` ORDER BY `Year` DESC, `WeekN` DESC, `Rank` ASC LIMIT 8");
请求其他信息:
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
// Load the Visualization API and the table package.
google.charts.load('current', {'packages':['table']});
google.charts.setOnLoadCallback(drawTable);
function drawTable() {
// Create our data table out of JSON data loaded from server.
var data_RTI_VS_W_TABLE = new google.visualization.DataTable(<?=$jsonTable_RTI_VS_W_TABLE?>);
// Instantiate and draw our chart, passing in some options.
// Do not forget to check your div ID
var table_RTI_VS_W_TABLE = new google.visualization.Table(document.getElementById('table_div_RTI_VS_W_TABLE'));
table_RTI_VS_W_TABLE.draw(data_RTI_VS_W_TABLE, {showRowNumber: false, width: '100%', height: '100%'});
}
</script>
</head>
更新:
经过其他一些实验,我发现我的问题与“系列名称”字段的字符串性质严格相关,即
<?php
try {
/* Establish the database connection */
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/* select relevant info for table googlechart */
$result_RTI_VS_W_TABLE = $conn->query("SELECT * FROM `video_series_rank_week` ORDER BY `Year` DESC, `WeekN` DESC, `Rank` ASC LIMIT 8");
$rows_RTI_VS_W_TABLE = array();
$table_RTI_VS_W_TABLE = array();
$table_RTI_VS_W_TABLE['cols'] = array(
/* Labels for your chart, these represent the column titles */
array('label' => 'Rank', 'type' => 'number'),
array('label' => 'Year', 'type' => 'string'),
array('label' => 'WeekN', 'type' => 'number'),
array('label' => 'Series Name', 'type' => 'string'),
array('label' => 'Total Historical Constrained Ad Avails', 'type' => 'number')
);
/* Extract the information from $result */
foreach($result_RTI_VS_W_TABLE as $r_RTI_VS_W_TABLE) {
$temp_RTI_VS_W_TABLE = array();
/* the following line will be used to get a table */
$temp_RTI_VS_W_TABLE[] = array('v' => (int) $r_RTI_VS_W_TABLE['Rank']);
/* Values */
$temp_RTI_VS_W_TABLE[] = array('v' => (string) $r_RTI_VS_W_TABLE['Year']);
$temp_RTI_VS_W_TABLE[] = array('v' => (int) $r_RTI_VS_W_TABLE['WeekN']);
$temp_RTI_VS_W_TABLE[] = array('v' => (string) $r_RTI_VS_W_TABLE['Series Name']);
$temp_RTI_VS_W_TABLE[] = array('v' => (int) $r_RTI_VS_W_TABLE['Total Historical Constrained Ad Avails']);
$rows_RTI_VS_W_TABLE[] = array('c' => $temp_RTI_VS_W_TABLE);}
$table_RTI_VS_W_TABLE['rows'] = $rows_RTI_VS_W_TABLE;
/* convert data into JSON format */
$jsonTable_RTI_VS_W_TABLE = json_encode($table_RTI_VS_W_TABLE);
} catch(PDOException $e) {echo 'ERROR: ' . $e->getMessage();}
?>
这就像Google表格无法在第5行之后显示该列。如果确实删除了该列,我将不再有任何问题。想法???
先谢谢了。
Drigo
已解决 我必须添加:
array('label' => 'Series Name', 'type' => 'string')
我的新PDO。
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")