Ключи ввода со значениями в массиве

#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;

       }
     }

?>