Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Pętla foreach i for, Wyświetlanie liczb malejąco
Owneds
post 10.10.2019, 09:33:13
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.05.2011

Ostrzeżenie: (0%)
-----


Witam serdecznie.

Mam mały problem z kodem.
Obecnie wygląda to tak, że dodaje np 10 osób w liście (z bazy) i obok każdej osoby jest licznik kliknięć.
Chciałbym to spreparować tak, aby u góry zaczynała się największa liczba a na dole najmniejsza.
mam na myśli:
Skrócony kod:
  1. public static function tablelist_front($post_id = false, $typec = false, $box_id = false){
  2. if(doo_here_type_links($post_id, $typec) == true){
  3. global $wpdb;
  4. $sql = "SELECT ID, post_author FROM $wpdb->posts ";
  5. $sql .= "WHERE post_parent = '$post_id' AND post_type = 'dt_gracze' AND post_status = 'publish' ";
  6. $sql .= "ORDER BY ID DESC ";
  7. $results = $wpdb->get_results($sql);
  8. if($results){
  9. $out = "<div id='{$box_id}' class='sbox'>";
  10. $out .= "<div class='links_table'><div class='fix-table'>";
  11. $out .= "<table><thead><tr>";
  12. $out .= "<th>Osoby</th>";
  13. if(doo_is_true('linksrowshow','cli') == true) $out .= "<th>".__d('Odsłon')."</th>";
  14. if(is_user_logged_in() && !current_user_can('subscriber'))
  15. $out .= "<th>".__d('Zarządzaj')."</th>";
  16. $out .= "</tr></thead><tbody>";
  17. foreach($results as $post){
  18. $psid = $post->ID;
  19. $type = get_post_meta($psid, '_dool_type', true);
  20. $clik = get_post_meta($psid, 'dt_views_count', true);
  21. $link = get_permalink($psid);
  22. $clik = ($clik) ? $clik : '0';
  23. $doma = ($type == __d('Gracze')) ? doo_compose_domainname('') : doo_compose_domainname($murl);
  24. $ltxt = ($type == __d('Gracze')) ? __d('Gracze') : $typec;
  25. $ulnk = get_author_posts_url($post->post_author);
  26. $fico = DOO_GICO.$doma;
  27. $domn = ($type == __d('Gracze')) ? 'Gracze' : doo_compose_domainname($murl);
  28. $edit = '<a href="#" class="edit_link" data-id="'.$psid.'">'.__d('Edit').'</a>';
  29. $delt = '<a href="#" class="delt_link" data-id="'.$psid.'">'.__d('Delete').'</a>';
  30.  
  31. if($type == $typec){
  32.  
  33. $out .= "<tr id='link-{$psid}'>";
  34. $out .= "<td><img src='{$fico}'> <a href='{$link}' target='_blank'>{$domn}</a></td>";
  35. if(doo_is_true('linksrowshow','cli') == true) $out .= "<td>{$clik}</td>";
  36. if(is_user_logged_in() && !current_user_can('subscriber'))
  37. $out .= "<td>{$edit} / {$delt}</td>";
  38. $out .= "</tr>";
  39. }
  40. }
  41. $out .= "</tbody></table></div></div></div>";
  42. }
  43. echo $out;
  44. }
  45. }


Próbowałem to dodać tak, ale cała pętla wykonuje się w jednej lini:
  1. $out .= "<tr id='link-{$psid}'>";
  2. $out .= "<td><img src='{$fico}'> <a href='{$link}' target='_blank'>{$domn}</a></td>";
  3. for($i = 0; $i <= 6; $i++)
  4. {
  5. if(doo_is_true('linksrowshow','cli') == true) $out .= "<td>{$i}</td>";
  6. }



A chciałbym aby wyglądało to tak:



Tylko nie wiem w którym miejscu dodać pętle aby jej wartość załadowywała się do każdej osoby osobno. Bo teraz jak sadze to jest tak, że dochodzi do każdej osoby, wykonuję petle od 6 do 2 i leci z następną osobą i znów to samo.

Pozdrawiam

Ten post edytował Owneds 10.10.2019, 09:43:16
Go to the top of the page
+Quote Post
kapslokk
post 10.10.2019, 10:11:59
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Na wstępie zaznaczę, że nigdy nie kodowałem nic w wordpressie, więc mogę nie mieć racji smile.gif

Generalnie zazwyczaj robi się tak, że pobiera się od razu wszystkie dane, które są potrzebne i w zapytaniu od razu się odpowiednio je sortuje. Ty pobierasz tylko ID i post_author, sortujesz to po ID i później dociągasz wszystkie inne dane - to negatywnie wpływa na wydajność skryptu. Wg. mnie powinieneś pobrać w jednym zapytaniu wszystkie dane, których potrzebujesz, posortować je w tym samym zapytaniu po ilości odsłon, a później w pętli tylko wyświetlić.
Go to the top of the page
+Quote Post
Owneds
post 10.10.2019, 10:57:08
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.05.2011

Ostrzeżenie: (0%)
-----


Serdecznie dziękuje za odpowiedź.

W wordpressie również dopiero zaczynam i jest to dość zaawansowana wtyczka którą staram się przerobić w miarę możliwości pod siebie i do efektu finalnego brakuje mi tylko tej pętli.
Generalnie nie chodzi nawet o to żeby to sortowało w bazie po ilości kliknięć, tylko aby było to nawet spreparowane, że nie zależnie jaka jest osoba u góry, po prostu od góry ma pokazywać największa liczbę kliknięć a na dole najmniejszą, zgodnie z liczbami które znajdują się w pętli smile.gif. To już by mnie zadowoliło smile.gif Tylko, że nie wiem gdzie dodać tę pętlę aby było tak jak na screenie drugim a nie tak jak teraz, że pętla wykonuje się do każdego zapytania osobno.


Pozdrawiam
Go to the top of the page
+Quote Post
kapslokk
post 11.10.2019, 06:55:48
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No ale to juz przy wyciąganiu z bazy powinieneś to posortować. Wyobraź sobie, że masz tam kilka stron tych osób, wchodzisz na pierwszą, największa ilość kliknięć na tej stronie to 5, więc osoba z tą ilością jest na 1 miejscu, wchodzisz na stronę drugą a tam 10000. To troche nie logiczne, nie uważasz? Zamiast
  1. $sql .= "ORDER BY ID DESC ";
zrób po prostu order by ILOSC_KLIKNIEC DESC. Zamiast ILOSC_KLIKNIEC musisz wstawic pole, w którym jest to przechowywane.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 07:25