#php #mysql #arrays
#php #mysql #массивы
Вопрос:
У меня проблемы с заполнением массива, который сгенерировал ключ, значением из базы данных. База данных возвращает 2 строки, первая строка должна быть ключом, а вторая — значением для этого ключа.
Это мой код:
$days = array();
if($query=db::query("select dayname(date_earned) as dayEarned, sum(downloads) as dayDownloaded
from perf_earnings
where date_earned between DATE_SUB(curdate(), INTERVAL 7 DAY) AND curdate()
group by dayEarned"))
{
while($row=$q->fetch_assoc()){
$day = $row["dayEarned"];
$dowSum = $row["dayDownloaded"];
$days[$day] = $dowSum;
}
}
Я получаю пустой массив.
То, что я хочу получить, это:
array(
[Monday]=>230,
[Tuesday]=>500,
[Wednesday]=>340,
etc.
)
Ну, как всегда, произошла глупая ошибка, когда вы не читали внимательно. Я не ввел $query правильно, когда хотел выполнить fetch_assoc.
Я написал «$ q» вместо «$ query».
В любом случае спасибо.
Комментарии:
1. сначала выполните запрос вручную и проверьте
2. Вы потрудились проверить, действительно ли ваш запрос выполнен успешно? Вы просто ПРЕДПОЛАГАЕТЕ, что
$query
это будет дескриптор результата и может быть запущен через цикл fetch_assoc. Существует ровно ОДИН способ успешного выполнения запроса и почти бесконечное количество способов его сбоя. Никогда не предполагайте успеха, поскольку шансы буквально равны 1 в бесконечности. Всегда проверяйте наличие сбоев и относитесь к успеху как к приятному сюрпризу.3. Мой запрос работает, я попробовал его на mysql workbench. Только если каким-то образом это не работает в php. Я использовал alert в блоке else, если он возвращает false, но ничего не произошло, поэтому я ПРЕДПОЛАГАЮ, что запрос в порядке.
Ответ №1:
я чувствую, что ваш запрос не получает никакого результата.
Первое, что
нужно сделать в первоначальном запросе group by, должно быть group by date_earned вместо group by dayEarned
Лучшим способом написания приведенного выше кода было бы
<?php
$qry = "SELECT dayname(date_earned) as dayEarned, sum(downloads) as dayDownloaded
FROM perf_earnings
WHERE date_earned between DATE_SUB(curdate(), INTERVAL 7 DAY)
AND curdate()
GROUP BY date_earned";
$qid = mysql_query($qry);
if($qid->num_rows()){
while($row = mysql_fetch_array($qid)){
$day = $row["dayEarned"];
$dowSum = $row["dayDownloaded"];
$days[$day] = $dowSum;
}
}
?>