PHP 用于在 while 命令中生成代码的变量
PHP variable used to generate code in a while command
我一直在构建 Google 图表,并且有很多 'fun' 让我的 SQL 命令满足 Google 的要求,但是,我终于完成后,现在需要继续处理更复杂的部分。可变数量的元素。
我的图表基于用户拥有的商店数量,我一直在使用基于迄今为止拥有三个商店的虚拟 set-up,但用户可以拥有 n 存储并需要调整我的 google 图表以适应这个变量输入。
到目前为止,我做得很好,我使用查询来提取用户拥有的商店数量,然后将其替换为 SQL 查询,因此我们 return 正确的数字Google 图表数据集中的行数,我可以将商店名称替换为 header,只是 PHP 我发现谷歌搜索将 SQL 输出写入Google 我正在苦苦挣扎的图表预期格式。
function drawChart1() {
var data = google.visualization.arrayToDataTable([
['Month', 'Store A', 'Store B', 'Store C'],
<?php
$sql = "SELECT
DATE_FORMAT(date_submitted,'%b-%y') AS 'Month',
CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 1 THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = 1 THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS 'Store A',
SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 1 THEN 1 ELSE 0 END) AS 'Store A_Base',
CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 2 THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = 2 THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS 'Store B',
SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 2 THEN 1 ELSE 0 END) AS 'Store B_Base',
CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 3 THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = 3 THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS 'Store C',
SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 3 THEN 1 ELSE 0 END) AS 'Store C_Base'
FROM data
WHERE store_list IN (" . $user_stores . ")
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";
$Sat = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($Sat)){
echo "['".$row['Month']."',".$row['Store A'].",".$row['Store B'].",".$row['Store C']."],";
}
?>
]);
所以,一切正常,给了我三个虚拟商店 1、2、3(商店 A、商店 B 和商店 C),并制作了一个漂亮的小图表。
所以我将其调整为以下内容:
<?php
//dynamically build chart queries
$sql_prep = "SELECT d.store_list AS NUMB, s.name AS NAME FROM data d INNER JOIN store_list s ON d.store_list=s.store_id WHERE d.status != '' AND d.store_list IN (" . $user_stores . ") GROUP BY store_list";
$sql_code = $conn->query($sql_prep);
while($row = $sql_code->fetch_assoc()) {
$select = $select . "CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS '" . $row['NAME'] . "',SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END) AS '" . $row['NAME'] . "_Base',";
$cstores = $cstores . "'" . $row['NAME'] . "', " ;
$carray = $carray . ",\".$row['" . $row['NAME'] . "'].\"";
}
?>
...
function drawChart1() {
var data = google.visualization.arrayToDataTable([
['Month', <?php echo $cstores ?>],
<?php
$sql = "SELECT
" . $select . "
DATE_FORMAT(date_submitted,'%b-%y') AS 'Month'
FROM data
WHERE store_list IN (" . $user_stores . ")
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";
$Sat = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($Sat)){
echo "['".$row['Month']."'".$carray."],";
}
?>
]);
它几乎就在那里,$select 工作,然后我更换了 $cstores,它仍然工作,但我被困在 $carray 上。如果我回应它,它完美地构建了进入那里所需的字符串,创建 ,".$row['Store A'].",".$row['Store B'].",".$row['Store C']."
但这不起作用所以显然 PHP 不支持(我真的不知道,我只是不断地用不同的方式戳它直到它起作用)
所以我现在卡住了。我需要将商店的 n 列写到构建 Google 图表的数组中,但我对 PHP 的理解很差。如果您不知道商店 A、商店 B 等的 header 列,是否有更好的写法 echo "['".$row['Month']."',".$row['Store A'].",".$row['Store B'].",".$row['Store C']."],";
?
知道了,有点变通,但更新了 SQL 并将输出更改为 Google 图表:
<?php
//dynamically build chart queries
$sql_prep = "SELECT d.store_list AS NUMB, s.name AS NAME FROM data d INNER JOIN store_list s ON d.store_list=s.store_id WHERE d.status != '' AND d.store_list IN (" . $user_stores . ") GROUP BY store_list";
$sql_code = $conn->query($sql_prep);
$select = '';
while($row = $sql_code->fetch_assoc()) {
$select .= ", CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS '" . $row['NAME'] . "' ";
$cstores = $cstores . "'" . $row['NAME'] . "', " ;
}
?>
<!--https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart-->
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart1);
function drawChart1() {
var data = google.visualization.arrayToDataTable([
['Month', <?php echo $cstores ?>],
<?php
$sql = "SELECT
QUOTE(DATE_FORMAT(date_submitted,'%b-%y')) AS 'Month'
". $select ."
FROM data
WHERE store_list IN (" . $user_stores . ")
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";
$Sat = mysqli_query($conn,$sql);
foreach( $Sat as $key => $array ) {
echo("[");
foreach( $array as $attribute => $value ) {
echo $value. ",";
}
echo("],");
}
?>
我一直在构建 Google 图表,并且有很多 'fun' 让我的 SQL 命令满足 Google 的要求,但是,我终于完成后,现在需要继续处理更复杂的部分。可变数量的元素。
我的图表基于用户拥有的商店数量,我一直在使用基于迄今为止拥有三个商店的虚拟 set-up,但用户可以拥有 n 存储并需要调整我的 google 图表以适应这个变量输入。
到目前为止,我做得很好,我使用查询来提取用户拥有的商店数量,然后将其替换为 SQL 查询,因此我们 return 正确的数字Google 图表数据集中的行数,我可以将商店名称替换为 header,只是 PHP 我发现谷歌搜索将 SQL 输出写入Google 我正在苦苦挣扎的图表预期格式。
function drawChart1() {
var data = google.visualization.arrayToDataTable([
['Month', 'Store A', 'Store B', 'Store C'],
<?php
$sql = "SELECT
DATE_FORMAT(date_submitted,'%b-%y') AS 'Month',
CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 1 THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = 1 THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS 'Store A',
SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 1 THEN 1 ELSE 0 END) AS 'Store A_Base',
CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 2 THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = 2 THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS 'Store B',
SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 2 THEN 1 ELSE 0 END) AS 'Store B_Base',
CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 3 THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = 3 THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS 'Store C',
SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = 3 THEN 1 ELSE 0 END) AS 'Store C_Base'
FROM data
WHERE store_list IN (" . $user_stores . ")
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";
$Sat = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($Sat)){
echo "['".$row['Month']."',".$row['Store A'].",".$row['Store B'].",".$row['Store C']."],";
}
?>
]);
所以,一切正常,给了我三个虚拟商店 1、2、3(商店 A、商店 B 和商店 C),并制作了一个漂亮的小图表。 所以我将其调整为以下内容:
<?php
//dynamically build chart queries
$sql_prep = "SELECT d.store_list AS NUMB, s.name AS NAME FROM data d INNER JOIN store_list s ON d.store_list=s.store_id WHERE d.status != '' AND d.store_list IN (" . $user_stores . ") GROUP BY store_list";
$sql_code = $conn->query($sql_prep);
while($row = $sql_code->fetch_assoc()) {
$select = $select . "CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS '" . $row['NAME'] . "',SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END) AS '" . $row['NAME'] . "_Base',";
$cstores = $cstores . "'" . $row['NAME'] . "', " ;
$carray = $carray . ",\".$row['" . $row['NAME'] . "'].\"";
}
?>
...
function drawChart1() {
var data = google.visualization.arrayToDataTable([
['Month', <?php echo $cstores ?>],
<?php
$sql = "SELECT
" . $select . "
DATE_FORMAT(date_submitted,'%b-%y') AS 'Month'
FROM data
WHERE store_list IN (" . $user_stores . ")
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";
$Sat = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($Sat)){
echo "['".$row['Month']."'".$carray."],";
}
?>
]);
它几乎就在那里,$select 工作,然后我更换了 $cstores,它仍然工作,但我被困在 $carray 上。如果我回应它,它完美地构建了进入那里所需的字符串,创建 ,".$row['Store A'].",".$row['Store B'].",".$row['Store C']."
但这不起作用所以显然 PHP 不支持(我真的不知道,我只是不断地用不同的方式戳它直到它起作用)
所以我现在卡住了。我需要将商店的 n 列写到构建 Google 图表的数组中,但我对 PHP 的理解很差。如果您不知道商店 A、商店 B 等的 header 列,是否有更好的写法 echo "['".$row['Month']."',".$row['Store A'].",".$row['Store B'].",".$row['Store C']."],";
?
知道了,有点变通,但更新了 SQL 并将输出更改为 Google 图表:
<?php
//dynamically build chart queries
$sql_prep = "SELECT d.store_list AS NUMB, s.name AS NAME FROM data d INNER JOIN store_list s ON d.store_list=s.store_id WHERE d.status != '' AND d.store_list IN (" . $user_stores . ") GROUP BY store_list";
$sql_code = $conn->query($sql_prep);
$select = '';
while($row = $sql_code->fetch_assoc()) {
$select .= ", CAST(((SUM(CASE WHEN LOWER(`q3`) = 'no' AND store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END)/SUM(CASE WHEN store_list = " . $row['NUMB'] . " THEN 1 ELSE 0 END))*100) as decimal (10,1)) AS '" . $row['NAME'] . "' ";
$cstores = $cstores . "'" . $row['NAME'] . "', " ;
}
?>
<!--https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart-->
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart1);
function drawChart1() {
var data = google.visualization.arrayToDataTable([
['Month', <?php echo $cstores ?>],
<?php
$sql = "SELECT
QUOTE(DATE_FORMAT(date_submitted,'%b-%y')) AS 'Month'
". $select ."
FROM data
WHERE store_list IN (" . $user_stores . ")
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";
$Sat = mysqli_query($conn,$sql);
foreach( $Sat as $key => $array ) {
echo("[");
foreach( $array as $attribute => $value ) {
echo $value. ",";
}
echo("],");
}
?>