За последние 24 часа нас посетили 15254 программиста и 1684 робота. Сейчас ищут 907 программистов ...

Как подсчитать количество единиц в полученом результате?

Тема в разделе "PHP и базы данных", создана пользователем skorpion, 25 дек 2014.

  1. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    Привет!
    Как подсчитать количество едициц в выведеном результате:
    Например, чтоб в выдаче получилось:
    - синий
    - синий
    - зеленый
    - желтый
    - зеленый
    - зеленый
    - красный
    Итог:
    Синий: 2
    Желтый: 1
    Зеленый: 3
    Красный: 1
    Серый: 0

    Код (PHP):
    1.     $sql = mysql_query("SELECT * FROM `baza_orderov` AS bo WHERE bo.`timestamp` BETWEEN {$d3} AND {$d4} ORDER BY `order_id` $sort_by", $link);
    2.     while ($result = mysql_fetch_array($sql)) {
    3.         $color= $result['color'];
    4. ........
    5. }
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    все цвета запихнуть в массив где ключ это цвет а значение это счетчик
    итерируя результат запроса делать инкремент нужного ключа в массиве
     
  3. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    Как это отобразить в виде кода? Покажи плиз...
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    $array = array('red'=>0, 'green' => 0, 'blue'=>0);
    while($r=fetch()){$array[$r['color']]++;}
     
  5. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    и тут вылетает ошибка Fatal error: Call to undefined function fetch() in
    и в какое место это подставить?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а это метаязык. знаком с таким? можно программу на русском описать, можно на английском, можно на метаязыке. в данном случае я использовал мету для ускорения написания ответа. ты уже сам должен додумать что из этого должно быть заменено и на какие конструкции языка пхп.
     
  7. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    к сожалению я не программист... я психолог. я попросил помощи, показать как это сделать.
    Додумать не получится по причине отсутствия необходимых знаний.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    понятно... вот тебе мод твоего кода.
    Код (PHP):
    1. $colorstat = array(); // поскольку я программист а не экстрасенс то я не знаю какие там у тебя цвета. поэтому вообще не инициализую значений.
    2. $sql = mysql_query("SELECT * FROM `baza_orderov` AS bo WHERE bo.`timestamp` BETWEEN {$d3} AND {$d4} ORDER BY `order_id` $sort_by", $link);
    3.     while ($result = mysql_fetch_array($sql)) {
    4.         if(!isset($colorstat[$result['color']])){$colorstat[$result]['color']]=0;} // налету записываю ноль в стату цвета ибо он впервые встретился
    5.         $colorstat[$result['color']]++; // инкремент значения по текущему цвету
    6.         $color= $result['color'];
    три строки добавлено, ноль изменено.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    покажи, плиз, как это должно работать с одним полем из множества строк результата запроса к субд. или ты предлагаешь цвет просто в массив пушить а потом стату один раз посчитать?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Угу. Отдельный массив. Одна строка в цикле без проверок и т.п. Код проще, памяти больше.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нулевые вхождения как?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    никак :D
    Но при выводе можно забить нулями и смержить с этой функцией. Тоже одна строка. Ибо есть функция для набивки массива.
     
  14. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    Warning: Illegal offset type in
    Вылетает ошибка:
    Parse error: syntax error, unexpected ']' in ....
    ...если убрать скобку {$colorstat[$result]['color']=0;} то вылетает ошибка Warning: Illegal offset type in ...

    А значения можно использовать такие.
    $colorstat = array('red'=>0, 'green' => 0, 'blue'=>0);

    как это победить?
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    $colorstat[$result]['color']]=0;

    $colorstat[$result['color']]=0;
     
  16. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    Вылетает ошибка: "Parse error: syntax error, unexpected ';', expecting ']' in ...."
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    показывай код и говори на какую строку ругается. а так догадаться невозможно.
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    skorpion, не мучай себя, почитай книги по php и mysql там все основы есть.
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да просто где-то скобка или точка с запятой пропущены и вот
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Главное что php номер строчки показывает где ошибку нашёл. Он бы её показал и пару строчек с верху и снизу.
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ну да, очепятался в объявлении нулевого значения, да. бывает. снегопад такой на улице - торопился пойти гулять
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дабы не быть голословным:

    Данные:
    Код (PHP):
    1. $arr = [
    2.   ['color' => 'a'],
    3.   ['color' => 'b'],
    4.   ['color' => 'c'],
    5.   ['color' => ''],
    6.   ['color' => 'a'],
    7.   ['color' => 'b'],
    8.   ['color' => 'b'],
    9.   ['color' => ''],
    10.   ['color' => 'a'],
    11.   ['color' => 'c'],
    12.   ['color' => 'c'],
    13.   ['color' => 'a'],
    14.   ['color' => 'b'],
    15.   ['color' => 'a'],
    16.   ['color' => 'c'],
    17.   ['color' => ''],
    18.   ['color' => 'a'],
    19. ];
    Алгоритм:
    Код (PHP):
    1. $colors = ['a', 'b', 'c', 'd', 'e', 'f',];
    2.  
    3. $count = [];
    4. foreach ($arr as $result) {
    5.   $count[] = $result['color'];
    6. }
    7.  
    8. $count = array_merge(array_fill_keys($colors, 0), array_count_values($count));
    9.  
    10. var_dump($count); 
    Результат:
    Код (Text):
    1. array (size=7)
    2.   'a' => int 6
    3.   'b' => int 4
    4.   'c' => int 4
    5.   'd' => int 0
    6.   'e' => int 0
    7.   'f' => int 0
    8.   '' => int 3
     
  23. skorpion

    skorpion Активный пользователь

    С нами с:
    6 фев 2011
    Сообщения:
    56
    Симпатии:
    1
    Адрес:
    Москва
    Доброе утро! извините, не мог вчера ответить...
    Пока что не получилось понять как запустить это без ошибок... второй вариант тоже с ошибкой ....
    если собрать всё в один файл:
    Код (PHP):
    1. <?php
    2.  
    3.     $arr = [
    4.       ['color' => 'a'],
    5.       ['color' => 'b'],
    6.       ['color' => 'c'],
    7.       ['color' => ''],
    8.       ['color' => 'a'],
    9.       ['color' => 'b'],
    10.       ['color' => 'b'],
    11.       ['color' => ''],
    12.       ['color' => 'a'],
    13.       ['color' => 'c'],
    14.       ['color' => 'c'],
    15.       ['color' => 'a'],
    16.       ['color' => 'b'],
    17.       ['color' => 'a'],
    18.       ['color' => 'c'],
    19.       ['color' => ''],
    20.       ['color' => 'a'],
    21.     ];
    22.  
    23.     $colors = ['a', 'b', 'c', 'd', 'e', 'f',];
    24.  
    25.     $count = [];
    26.     foreach ($arr as $result) {
    27.       $count[] = $result['color'];
    28.     }
    29.  
    30.     $count = array_merge(array_fill_keys($colors, 0), array_count_values($count));
    31.  
    32.     var_dump($count); 
    33.  
    34. ?>
    то вылетает ошибка


    Parse error: syntax error, unexpected '[' in /home/users1/mydomen.ru/test.php on line 3



    В общем вопрос пока ещё актуален...
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    А почему ты не хочешь прочитать вдумчиво одну книгу по php и mysql для того чтобы понимать основы и самому исправлять ошибки?
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    потому что он психолог