Как в PHP сортировать данные из Mysql

#1 29 сентября 2016 в 13:17
Как в PHP сортировать данные Mysql используя данные из php ?

  1.  
  2. <?php $i = 1; foreach($ranks as $rank){ ?>
  3. <tr><td class="_num"><?php echo $i;?></td>
  4. <td class="_colors _color_0"></td>
  5. <td class="_pic">
  6. <td class="_bigs"><a href="<?php echo href_to('pages', $rank['url']); ?>"><?php echo $rank['teams_name']; ?></a></td>
  7. <td class="_right"><?php html($rank['rank']); ?></td>
  8. <td class="_right"><?php html($rank['lost']); ?></td>
  9. <?php
  10. $x = $rank['rank']; // Побед 25 Например.
  11. $y = $rank['lost']; // Поражений 10 Например.
  12. $summ = $x + $y; // Прибавляем что бы узнать сколько в общем было игр и получаем сумму.
  13. $dil = $rank['rank'] / $summ; //Сумму Побед делим на полученную сумму. = 35.71000000
  14. $itoq = $dil * 100; //Полученную победы умножаем на 100 что бы получить итог в процентах что бы убрать ноль перед числом. 35.7100000
  15. ?>
  16. <td class="_right"><?php echo round ($itoq, 1); ?></td> Вот число для сортировки.
  17. </tr>
  18. <?php $i++; } ?>
  19.  
Мне нужно <?php echo round ($itoq, 1); ?> сортировать по этому числу по убыванию или на оборот не знаю как сделать пожалуйста помогите.

< — Вот где процент там <?php echo round ($itoq, 1); ?>
#2 29 сентября 2016 в 13:53
А причем тут mysql вообще?
В коде ни единого обращения к базе.
Я бы попробовал сначала при переборе массива вычислять этот процент, потом записывать все данные в другой массив, а его сортировать по этим процентам и только потом выводить на отображение.
#3 29 сентября 2016 в 13:58


А причем тут mysql вообще?
В коде ни единого обращения к базе.
Я бы попробовал сначала при переборе массива вычислять этот процент, потом записывать все данные в другой массив, а его сортировать по этим процентам и только потом выводить на отображение.

Ris

Как это не единого все данные берутся из базы но сумма исчисляется в самом php, мне нужно сортировать по массиву $itoq
#4 29 сентября 2016 в 14:16



А причем тут mysql вообще?
В коде ни единого обращения к базе.
Я бы попробовал сначала при переборе массива вычислять этот процент, потом записывать все данные в другой массив, а его сортировать по этим процентам и только потом выводить на отображение.

Ris

Как это не единого все данные берутся из базы но сумма исчисляется в самом php, мне нужно сортировать по массиву $itoq

Нико

У вас в коде нет ничего про MySQL, поэтому вопрос был в тему.
Вы же можете запросить данные из MySQL уже в отсортированном виде.


  1.  
  2. SELECT * FROM t1
  3. WHERE (бла бла бла)
  4. ORDER BY (тут название поля сортировки и порядок сортировки
  5.  
#5 29 сентября 2016 в 14:17
Добавлю: сумму вычислять тоже нужно прямо в MySQL
Зачем напрягать для этого PHP?
#6 29 сентября 2016 в 14:18


Добавлю: сумму вычислять тоже нужно прямо в MySQL
Зачем напрягать для этого PHP ?

Alexey

Я знаю. Вот не знаю как mysql это делать как вычислять, умножать делить…
#7 29 сентября 2016 в 14:19


Добавлю: сумму вычислять тоже нужно прямо в MySQL
Зачем напрягать для этого PHP ?

Alexey

  1. $ranks = $model->orderBy('i.rank','DESC')->limit(10)->getRanks();
а мне надо что бы например ( a+ b = c, c*a) что то типа этого
#8 29 сентября 2016 в 14:35



Добавлю: сумму вычислять тоже нужно прямо в MySQL
Зачем напрягать для этого PHP ?

Alexey

  1. $ranks = $model->orderBy('i.rank','DESC')->limit(10)->getRanks();
а мне надо что бы например ( a+ b = c, c*a) что то типа этого

Нико

А вы уверены, что limit(10) даст вам точно полную сумму нужных строк? Это же ограничение.
И если честно, то я не понял, что значит "( a+ b = c, c*a)"
#9 29 сентября 2016 в 14:36

Я знаю. Вот не знаю как mysql это делать как вычислять, умножать делить ..

Нико


SELECT SUM(column_name) as FieldName FROM table_name;

Выведет вам строку с суммой по полю column_name и назовет это поле как FieldName
#10 29 сентября 2016 в 15:01
Alexey,
Вы правы абсолютно. Но есть один нюанс. Я так и не нашел, как в двойке отправить в метод выборки что-то типа SUM(column_name).

Нико,
Вот как-то так я думаю:
  1. <?php foreach($ranks as $rank)
  2. {
  3. $x = $rank['rank']; // Побед 25 Например.
  4. $y = $rank['lost']; // Поражений 10 Например.
  5. $summ = $x + $y; // Прибавляем что бы узнать сколько в общем было игр и получаем сумму.
  6. $dil = $rank['rank'] / $summ; //Сумму Побед делим на полученную сумму. = 35.71000000
  7. $itoq = $dil * 100; //Полученную победы умножаем на 100 что бы получить итог в процентах что бы убрать ноль перед числом. 35.7100000
  8. array_push($ranks, $itoq);
  9. }
  10. asort($ranks, ['какой по номеру элемент itog в массиве']);
  11.  
  12. foreach($ranks as $rank){ ?>
  13. <tr><td class="_num"><?php echo $i;?></td>
  14. <td class="_colors _color_0"></td>
  15. <td class="_pic">
  16. <td class="_bigs"><a href="<?php echo href_to('pages', $rank['url']); ?>"><?php echo $rank['teams_name']; ?></a></td>
  17. <td class="_right"><?php html($rank['rank']); ?></td>
  18. <td class="_right"><?php html($rank['lost']); ?></td>
  19. <td class="_right"><?php echo round ($itoq, 1); ?></td>
  20. <?php } ?>
Сами понимаете, ничего не проверял.
#11 29 сентября 2016 в 15:04


Я знаю. Вот не знаю как mysql это делать как вычислять, умножать делить ..

Нико


SELECT SUM(column_name) as FieldName FROM table_name;

Выведет вам строку с суммой по полю column_name и назовет это поле как FieldName

Alexey

Я не знаю как вы меня поняли или нет вот весь файл.



widget.php

  1.  
  2. <?php
  3. class widgetRankingTmrank extends cmsWidget {
  4. public function run(){
  5. $model = cmsCore::getModel('ranking');
  6. $total = $model->getUsersCount();
  7. $ranks = $model->limit(10)->getRanks();
  8. $user = cmsUser::getInstance();
  9. return array(
  10. 'ranks' => $ranks,
  11. 'total' => $total
  12. );
  13. }
  14. }
  15.  
  16.  
rank.tpl.php

  1.  
  2.  
  3.  
  4. <div class="sport__table">
  5. <table class="table">
  6. <tbody>
  7. <tr>
  8. <th class="_group_thead" colspan="4">
  9. <div class="sport__table__heads"><?php echo LANG_TOURNAMENT_TEAMS; ?></div>
  10. </th>
  11. </tr>
  12. <tr>
  13. <th colspan="4"></th>
  14. <th class="_center"><strong><?php echo LANG_TOURNAMENT_W; ?></strong></th>
  15. <th class="_center"><strong><?php echo LANG_TOURNAMENT_L; ?></strong></th>
  16. <th class="_center"><strong>%</strong></th>
  17. </tr>
  18.  
  19. <?php $i = 1; foreach($ranks as $rank){ ?>
  20. <tr><td class="_num"><?php echo $i;?></td>
  21. <td class="_colors _color_0"></td>
  22. <td class="_pic">
  23. <td class="_bigs"><a href="<?php echo href_to('pages', $rank['url']); ?>"><?php echo $rank['teams_name']; ?></a></td>
  24. <td class="_right"><?php html($rank['rank']); ?></td>
  25. <td class="_right"><?php html($rank['lost']); ?></td>
  26. <?php
  27. $x = $rank['rank']; // Побед 25 Например.
  28. $y = $rank['lost']; // Поражений 10 Например.
  29. $summ = $x + $y; // Прибавляем что бы узнать сколько в общем было игр и получаем сумму.
  30. $dil = $rank['rank'] / $summ; //Сумму Побед делим на полученную сумму. = 35.71000000
  31. $itoq = $dil * 100; //Полученную победы умнажаем на 100 что бы получить итог в процентах что бы убрать ноль перед числом. 35.7100000
  32. ?>
  33. <td class="_right"><?php echo round ($itoq, 1); ?></td>
  34. </tr>
  35. <?php $i++; } ?>
  36. </tbody>
  37. </table>
  38. </div>
  39.  
  40.  
Мне нужно например если у команды A 90, а у команды Б 70 то 90 было на вверху
#12 29 сентября 2016 в 15:08
  1.  
  2. $model = cmsCore::getModel('ranking');
  3. $total = $model->getUsersCount();
  4. $ranks = $model->orderBy('rank', 'DESC')->limit(10)->getRanks(); // DESC или ASC
  5. $user = cmsUser::getInstance(); // <--- для чего?
  6.  
#13 29 сентября 2016 в 15:10


  1.  
  2. $model = cmsCore::getModel('ranking');
  3. $total = $model->getUsersCount();
  4. $ranks = $model->orderBy('rank', 'DESC')->limit(10)->getRanks(); // DESC или ASC
  5. $user = cmsUser::getInstance(); //
  6.  

Evanescence

Это по ошибке он не нужен… из другого виджета

  1. <?php
  2.  
  3. class widgetRankingTmrank extends cmsWidget {
  4.  
  5. public function run(){
  6.  
  7. $model = cmsCore::getModel('ranking');
  8. $total = $model->getUsersCount();
  9. $ranks = $model->limit(10)->getRanks();
  10.  
  11. return array(
  12. 'ranks' => $ranks,
  13. 'total' => $total
  14.  
  15. );
  16.  
  17. }
  18.  
  19. }

Как видите у меня идет подсчет в шаблоне
Мне нужно например если у команды A 90, а у команды Б 70 то 90 было на вверху

<?php echo round ($itoq, 1); ?> — но этого значения нету в Базе, потому что посчтет ведется в шаблоне
#15 29 сентября 2016 в 15:25
Пробовали сортировать в запросе?
  1. $ranks = $model->orderBy('rank', 'DESC')->limit(10)->getRanks(); // DESC или ASC
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.