Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie danych
Forum PHP.pl > Forum > PHP
tomaszek83
Witam,

napisałem taki oto prosty kod pobierający dane z bazy:

  1. <?php
  2. $db = JFactory::getDBO();
  3. $query = $db->getQuery(true);
  4.  
  5. $query = "SELECT
  6. #__bl_players.id,
  7. #__bl_players.first_name,
  8. #__bl_players.last_name,
  9. #__bl_extra_values.fvalue,
  10. #__bl_photos.ph_filename
  11. FROM #__bl_players
  12. INNER JOIN #__bl_assign_photos
  13. ON #__bl_players.id=#__bl_assign_photos.cat_id
  14. INNER JOIN #__bl_photos
  15. ON #__bl_assign_photos.photo_id=#__bl_photos.id
  16. INNER JOIN #__bl_extra_values
  17. ON #__bl_players.id = #__bl_extra_values.uid
  18. WHERE #__bl_players.team_id = ".($params->get('team_id'))." AND #__bl_extra_values.f_id = ".($params->get('squad_number'))." AND #__bl_players.position_id = ".($params->get('pos_gk'))." ORDER BY #__bl_extra_values.fvalue ASC";
  19.  
  20. $db->setQuery($query);
  21. $players_gk = $db->loadObjectList();
  22. ?>
  23.  
  24. <div class="mod_js_squad">
  25. <h4><?php echo $params->get('pos_gk_txt'); ?></h4>
  26.  
  27. <?php foreach($players_gk as $row):
  28. $cItemId = $params->get('customitemid');
  29. $Itemid = JRequest::getInt('Itemid');
  30. if(!$cItemId){
  31. $cItemId = $Itemid;
  32. }
  33. $url = JRoute::_('index.php?option=com_joomsport&task=player&id='.$row->id.'&Itemid='.$cItemId); ?>
  34. <div class="mod_js_squad_player">
  35. <!-- <?php echo '<img style="border:1px solid #aaa;height:35px" src="media/bearleague/'.$row->ph_filename.'" title="'.$row->last_name.'" />' ?> -->
  36. <a href="<?php echo $url ?>"><?php echo $row->fvalue ?>. <?php echo $row->first_name ?> <?php echo $row->last_name ?></a>
  37. </div>
  38. <?php endforeach ?>
  39.  
  40. </div>
  41.  

$params są podawane z formularza.

I teraz mały problem. Zmienna $fvalue przechowuje numer zawodnika. Niestety w bazie jest on zdefiniowany jako pole tekstowe (nie można tego zmienić gdyż jest to komponent firmy trzeciej do którego napisałem moduł). Sortowanie wyników wygląda więc następująco (1,12,13,14,2,21,23,3,34,35... itd..). Jak to zmienić? Całość działa bez zarzutu poza tym sortowaniem.



Za wszelkie cenne uwagi z góry dziękuję.

Pozdrawiam
Tomek
timon27
Najprościej zamiast:
  1. ORDER BY kolumna

dać:
  1. ORDER BY 0+kolumna

mar1aczi
Do pobrania/sortowania #__bl_extra_values.fvalue wykorzystaj funkcję lpad
tomaszek83
Dziękuję za podpowiedzi. Poradziłem sobie troszkę inaczej. Zmodyfikowałem sortowanie w taki sposób:

  1. ORDER BY CAST( SUBSTRING_INDEX( e327t_bl_extra_values.fvalue, ' ', 1 ) AS SIGNED )";


I działa smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.