#javascript #php #mysql #sql
#javascript #php #mysql #sql
Вопрос:
То, что я пытаюсь сделать, просто. У меня есть таблица базы данных MySQL для продаж мороженого под названием «ice_cream_sales». Столбцы, которые у меня есть для таблицы, — это «Вкус» мороженого и временная метка «DateTime». Я хочу отобразить количество продаж мороженого на вкус за каждый год. Итак, у меня есть цикл while, который выполняет SQL-запрос, который извлекает количество строк за каждый год, затем, в зависимости от вкуса мороженого для полученных строк, он добавляет его в соответствующую переменную PHP для этого вкуса мороженого, чтобы подсчитать продажи этого мороженого в текущем году. Затем я хочу использовать линейную диаграмму Google, которая использует массив JS для отображения продаж мороженого за год. Перейдите по этой ссылке, чтобы увидеть, как это работает:https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart.
Однако сейчас я просто хочу убедиться, что я могу успешно перенести переменные PHP в переменные JS, а затем добавить эти переменные в массив JS. Поэтому я переношу переменные PHP в переменные JS с помощью операторов echo, поскольку PHP-код встроен в тег JS script. Затем я создаю массив, используя эти значения счетчиков для каждого ароматизированного мороженого за год, которые будут добавлены к массиву, используемому для линейной диаграммы Google. Когда я пытаюсь выполнить код, я получаю пустую страницу без сообщений об ошибках. Любые предложения и исправления будут высоко оценены.
Когда я комментирую блок кода оператора if в операторе while, чтобы проверить вкус мороженого, код работает хорошо, и я получаю выходной массив [2010, 0, 0, 0], [2011, 0, 0, 0]
и так далее.
<script>
var toAdd = new Array();
<?php
$year = intval(2010);
while ($year <= 2019) {
include 'includes/dbh_cred.php';
$sql = "SELECT * FROM ice_cream_sales WHERE myDate LIKE '$year%'";
$chocolate = intval(0);
$vanilla = intval(0);
$strawberry = intval(0);
$result = mysqli_query($connect, $sql);
if (mysqli_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
if ($row['Flavor'] == 'Chocolate')
$chocolate = $chocolate 1;
else if ($row['Flavor'] == 'Vanilla')
$vanilla = $vanilla 1;
else if ($row['Flavor'] == 'Strawberry')
$strawberry = $strawberry 1;
}
}
//chocolate, vanilla, strawberry sales for that particular year
echo "var chocolate = " . $chocolate . ";";
echo "var vanilla = " . $vanilla . ";";
echo "var strawberry = " . $strawberry . ";";
echo "var year = " . $year . ";";
//add these values to an array
echo "toAdd.push([year, chocolate, vanilla, strawberry]);";
$year = $year 1;
}
?>
var data = new Array(["Year", "Chocolate", "Vanilla", "Strawberry"]);
console.log(data[0][0] "t" data[0][1] "t" data[0][2] "t"
data[0][3]);
data.push(toAdd);
for(var i = 1; i < data.length; i ) {
for(var j = 0; j < data[i].length; j ) {
console.log(data[i][j]);
Комментарии:
1. Почему бы вам просто не вывести весь массив непосредственно в свой JavaScript?
2. Просто получите итоговые значения в вашем запросе, тогда не будет необходимости в цикле.
Ответ №1:
Это могло бы быть намного проще.
<?php
include 'includes/dbh_cred.php';
$sql = "SELECT
YEAR(myDate) AS year,
SUM(IF(Flavor = 'chocolate', 1, 0)) AS chocolate,
SUM(IF(Flavor = 'strawberry', 1, 0)) AS strawberry,
SUM(IF(Flavor = 'vanilla', 1, 0)) AS vanilla
FROM ice_cream_sales
GROUP BY YEAR(myDate)";
$result = $connect->query($sql);
if ($result->num_rows) {
while ($row = mysqli_fetch_assoc($result)) {
$data[] = $row;
}
}
?>
<script>
var data = <?php echo json_encode($data);?>;
</script>
Вот демонстрация SQL:http://sqlfiddle.com /#!9/f7ca1b/3/0. В основном он поддерживает счетчик для каждого варианта, а затем группирует его по годам, поэтому все ваши данные компилируются как часть запроса к базе данных. Затем все, что вам нужно сделать в PHP, это поместить записи в массив и вывести их в формате JSON.
Я бы рекомендовал использовать PDO для доступа к базе данных, так как это намного проще в освоении и сделало бы этот код еще более кратким.
Ответ №2:
Попробуйте следовать SQL, может быть, это будет легко для вас?
выберите вкус, count(*) из ice_cream_sales, ГДЕ myDate, КАК ‘$ year%’, группируется по вкусу