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:
public http://www.php.net/static function tablelist_front($post_id = false, $typec = false, $box_id = false){ if(doo_here_type_links($post_id, $typec) == true){ http://www.php.net/global $wpdb; $sql = "SELECT ID, post_author FROM $wpdb->posts "; $sql .= "WHERE post_parent = '$post_id' AND post_type = 'dt_gracze' AND post_status = 'publish' "; $sql .= "ORDER BY ID DESC "; $results = $wpdb->get_results($sql); if($results){ $out = "<div id='{$box_id}' class='sbox'>"; $out .= "<div class='links_table'><div class='fix-table'>"; $out .= "<table><thead><tr>"; $out .= "<th>Osoby</th>"; if(doo_is_true('linksrowshow','cli') == true) $out .= "<th>".__d('Odsłon')."</th>"; if(is_user_logged_in() && !current_user_can('subscriber')) $out .= "<th>".__d('Zarządzaj')."</th>"; $out .= "</tr></thead><tbody>"; foreach($results as $post){ $psid = $post->ID; $type = get_post_meta($psid, '_dool_type', true); $clik = get_post_meta($psid, 'dt_views_count', true); $link = get_permalink($psid); $clik = ($clik) ? $clik : '0'; $doma = ($type == __d('Gracze')) ? doo_compose_domainname('') : doo_compose_domainname($murl); $ltxt = ($type == __d('Gracze')) ? __d('Gracze') : $typec; $ulnk = get_author_posts_url($post->post_author); $fico = DOO_GICO.$doma; $domn = ($type == __d('Gracze')) ? 'Gracze' : doo_compose_domainname($murl); $edit = '<a href="#" class="edit_link" data-id="'.$psid.'">'.__d('Edit').'</a>'; $delt = '<a href="#" class="delt_link" data-id="'.$psid.'">'.__d('Delete').'</a>'; if($type == $typec){ $out .= "<tr id='link-{$psid}'>"; $out .= "<td><img src='{$fico}'> <a href='{$link}' target='_blank'>{$domn}</a></td>"; if(doo_is_true('linksrowshow','cli') == true) $out .= "<td>{$clik}</td>"; if(is_user_logged_in() && !current_user_can('subscriber')) $out .= "<td>{$edit} / {$delt}</td>"; $out .= "</tr>"; } } $out .= "</tbody></table></div></div></div>"; } http://www.php.net/echo $out; } }
$out .= "<tr id='link-{$psid}'>"; $out .= "<td><img src='{$fico}'> <a href='{$link}' target='_blank'>{$domn}</a></td>"; for($i = 0; $i <= 6; $i++) { if(doo_is_true('linksrowshow','cli') == true) $out .= "<td>{$i}</td>"; }
Na wstępie zaznaczę, że nigdy nie kodowałem nic w wordpressie, więc mogę nie mieć racji
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ć.
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 . To już by mnie zadowoliło 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
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
zrób po prostu order by ILOSC_KLIKNIEC DESC. Zamiast ILOSC_KLIKNIEC musisz wstawic pole, w którym jest to przechowywane.
$sql .= "ORDER BY ID DESC ";
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)