我正在使用谷歌图表API来创建图表。我有48个数据点,一天每30分钟一个点。我的php脚本每15秒运行一次,并将计算出的比特币价格保存到数据库中。现在要从数据库中获取最新价格,我正在使用此代码。
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT priceLBTC FROM prices ORDER BY id DESC LIMIT 1";
$result = $conn->query($sql);
$bitcoinPrice = 0;
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$bitcoinPrice = round($row["priceLBTC"], 2);
}
} else {
echo "0 results";
}
$sql2 = "SELECT priceLBTC FROM prices ORDER BY id DESC LIMIT 5760";
$result2 = $conn->query($sql);
$bitcoinPriceArr = array();
if ($result->num_rows > 0) {
// output data of each row
$i=-1;
while($row = $result->fetch_assoc()) {
$i++;
if ($i%120) continue;
$bitcoinPriceArr[] = round($row["priceLBTC"], 2);
}
} else {
echo "0 results";
}
$conn->close();
?>
因此图表上的第一个数据点应该是最近的价格,即$ bitcoinPrice,然后47个跟随的数据点应该是彼此之前的120行。例如:下一个数据点的id是((最近价格的行) - 120))。 (php脚本每15秒运行一次,每分钟4次* 30分钟=每30分钟120次)
是否有更简单的方法来获取所有数据并将其放入图表而不创建其他47个变量并单独查询它们?
这是相关的谷歌图表javascript
function drawAxisTickColors() {
var data = new google.visualization.DataTable();
data.addColumn('number', 'X');
data.addColumn('number', 'Price');
data.addRows([
[0, 0], [1, 10], [2, <?php echo $bitcoinPriceArr[0]; ?>], [3, 17], [4, 18], [5, 9],
[6, 11], [7, 27], [8, 33], [9, 40], [10, 32], [11, 35], [12, 35], [13, 35], [14, 35], [15, 35], [16, 35], [17, 35], [18, 35], [19, 35], [20, 35], [21, 35], [22, 35], [23, 35],
[24, 5], [25, 5], [26, 5], [27, 5], [28, 5], [29, 5], [30, 5], [31, 5], [32, 5], [33, 5], [34, 5], [35, 5], [36, 5], [37, 5], [38, 5], [39, 5], [40, 31], [41, 320], [42, 315], [43, 305],
[44, 299], [45, 309], [46, 300], [47, <?php echo $bitcoinPrice; ?>]
]);
答案 0 :(得分:1)
请在发布问题之前查看论坛。
这基本上在这里解释:How do you select every n-th row from mysql
应用于您的用例,如下所示:
SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, priceLBTC
FROM (
SELECT @row :=0) r, prices
) ranked
WHERE rownum % [120] = 1
更容易 - 甚至可能更高效 - 的方式就是获取所有数据,并选择PHP所需的点数。
$sql = "SELECT priceLBTC FROM prices ORDER BY id DESC LIMIT 5760";
$result = $conn->query($sql);
$bitcoinPrice = array();
if ($result->num_rows > 0) {
// output data of each row
$i=-1;
while($row = $result->fetch_assoc()) {
$i++;
if ($i%120) continue;
$bitcoinPrice[] = round($row["priceLBTC"], 2);
}
} else {
echo "0 results";
}
$conn->close();
会发生什么:
$bitcoinPrice
应该是array
,因为它需要保留几个值$i=0
$i
没有的数据点
除以120后的余数更好的方法是通过mysqli::fetch_all
立即获取所有查询结果,并通过仅获取每第120个条目来构建$bitcoinPrice
数组。这样,您就不必循环访问119个数据点,只是为了得到您需要的数据点。
添加强>
使用json_encode($bitcoinPriceArr)
将php变量转换为javscript中可用的内容。如果你在javascript assignemnt中回显结果,你将得到一个javascript数组:
var bitcoinPrizes = <?php echo json_encode($bitcoinPriceArr); ?>;
通过它你可以建立你的图表:
var rows=[];
for (var i in bitcoinPrizes ){
rows.push([i, bitcoinPrizes [i]]);
}
data.addRows($rows);
我认为你也可以这样做:
for (var i in bitcoinPrizes ){
data.addRows([[i, bitcoinPrizes [i]]);
}
但我并不完全确定。
请注意,这不是让你的整个任务整理和解决的地方。聘请开发人员。 如果您有特定问题或遇到具体问题,可以在此处寻求帮助。 但是,您仍然需要学习所使用的语言和技术的基础知识。