Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
Probleme la afiserea rezultatelor din numararea paginilor
Last Updated: Feb 23 2013 13:24, Started by
Nsilviu
, Feb 21 2013 23:25
·
0
#1
Posted 21 February 2013 - 23:25
Salut problema mea este urmatorea:
Am o functie de imparte rezultatele pe pagini.. Problema este la afiserea rezultatelor Am urmatorul cod: include('ttt_files/paginare.php'); $rezultate_pe_pagina = '2'; $statement = "`anunt_standard` where `activat` = 0 AND prs_prv='$filtru_p' "; /* Inceputul stabiliri functiei numaratorelor */ $page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]); $limit = $rezultate_pe_pagina; $startpoint = ($page * $limit) - $limit; //Query pentru afisere si paginare /* Sfarsitul stabiliri functiei numaratorelor */ $url = "{$server_url}anunturi/f/{$_GET['f']}/page/"; echo "<div id='asezare_butoane'>".pagination($statement,$limit,$page,$url)."</div>"; //afiseaza inregistrarile platite $query_pay = mysql_query("SELECT * FROM {$statement} AND activat_plata = '1' AND sters = '0' ORDER BY data_adaugare DESC LIMIT {$startpoint} , {$limit}"); echo "<table border='0' width='950px' style='border-collapse:separate; border-spacing:0px 5px;'>"; $i = 0; while ($row = mysql_fetch_assoc($query_pay)) { include('continut_platit.php'); } echo "</table>"; //afiseaza inregistrarile normale $query = mysql_query("SELECT * FROM {$statement} AND sters = '0' AND activat_plata = '0' ORDER BY data_adaugare DESC LIMIT {$startpoint} , {$limit}"); echo "<table border='0' width='950px' style='border-collapse:separate; border-spacing:0px 5px;'>"; $i = 0; while ($row = mysql_fetch_assoc($query)) { include('continut.php'); } echo "</table>"; //afiseaza inregistrarile sterse $query_del = mysql_query("SELECT * FROM {$statement} AND sters = '1' ORDER BY data_adaugare DESC LIMIT {$startpoint} , {$limit}"); echo "<table border='0' width='950px' style='border-collapse:separate; border-spacing:0px 5px;'>"; $i = 0; while ($row = mysql_fetch_assoc($query_del)) { include('continut_sters.php'); } echo "</table>";Problema este ca el nu afiseaza 2 rezultate pe pagina cum este setat acuma ci afiseaza cate 2 rezultate din fiecare query adica Afiseaza in total 6 rezultate: 2 - $query_pay 2 - $query 2 - $query_del Dar numi dau seama cum sa fac sa afiseze decat cate 2 de exemplu e prima pagina daca sunt introduse 2 inregistrari 'pay' sa le afiseze decat pe alea 2..Sau daca sunt decat 2 inregistrari la query sa le afiseze decat pe acele 2:( Functia pentru paginare <?php function pagination($query, $per_page = 10,$page = 1, $url = '?'){ $query = "SELECT COUNT(*) as `num` FROM {$query}"; $row = mysql_fetch_array(mysql_query($query)); $total = $row['num']; $adjacents = "2"; $page = ($page == 0 ? 1 : $page); $start = ($page - 1) * $per_page; $prev = $page - 1; $next = $page + 1; $lastpage = ceil($total/$per_page); $lpm1 = $lastpage - 1; $pagination = ""; if($lastpage > 1) { $pagination .= "<ul class='pagination'>"; //$pagination .= "<li class='details'>Pagina $page din $lastpage</li>"; if ($lastpage < 7 + ($adjacents * 2)) { for ($counter = 1; $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "<li><a class='current'>$counter</a></li>"; else $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>"; } } elseif($lastpage > 5 + ($adjacents * 2)) { if($page < 1 + ($adjacents * 2)) { for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) { if ($counter == $page) $pagination.= "<li><a class='current'>$counter</a></li>"; else $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>"; } $pagination.= "<li class='dot'>...</li>"; $pagination.= "<li><a href='{$url}$lpm1/'>$lpm1</a></li>"; $pagination.= "<li><a href='{$url}$lastpage/'>$lastpage</a></li>"; } elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) { $pagination.= "<li><a href='{$url}1/'>1</a></li>"; $pagination.= "<li><a href='{$url}2/'>2</a></li>"; $pagination.= "<li class='dot'>...</li>"; for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) { if ($counter == $page) $pagination.= "<li><a class='current'>$counter</a></li>"; else $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>"; } $pagination.= "<li class='dot'>..</li>"; $pagination.= "<li><a href='{$url}$lpm1/'>$lpm1</a></li>"; $pagination.= "<li><a href='{$url}$lastpage/'>$lastpage</a></li>"; } else { $pagination.= "<li><a href='{$url}1/'>1</a></li>"; $pagination.= "<li><a href='{$url}2/'>2</a></li>"; $pagination.= "<li class='dot'>..</li>"; for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "<li><a class='current'>$counter</a></li>"; else $pagination.= "<li><a href='{$url}$counter/'>$counter</a></li>"; } } } if ($page < $counter - 1){ $pagination.= "<li><a href='{$url}$next/'>Urmatoarea</a></li>"; //$pagination.= "<li><a href='{$url}page=$lastpage'>Ultima</a></li>"; }else{ $pagination.= "<li><a class='current'>Urmatoarea</a></li>"; //$pagination.= "<li><a class='current'>Ultima</a></li>"; } $pagination.= "</ul>\n"; } return $pagination; } ?>Ma gandeam sa numar rezultatele totale mai sus si dupa sa creez o conditie care sa fie afiseate dar nustiu ce fel de conditie sa pun. Sau sa pun cele 3 query desupra si sa numar rezultatele apoi sa le adun si sa le impart la 3 o merge asa ? Dar iar ajung la o functie care nu stiu cum sa o gandesc |
#2
Posted 22 February 2013 - 00:44
Ai:
- inregistrari platite; (prima faza) - inregistrari normale; (faza a doua) - inregistrari sterse; (faza a treia) (Doar o idee = habar nu am daca se poate face) Inseamna ca ajunge sa scoti partea de cod pentru cele care nu le vrei in prima faza, in a doua faza adaugi una dintre cele scoase (partea de cod) si scoti pe cea existenta (partea de cod) si mai iti ramane la final cea de a treia (parte de cod), mai ramane doar sa vezi cum inlantuiesti aceste 3 parti sa urmeze una dupa incheierea celeilalte sau le folosesti separat. Exemplu prima faza: include('ttt_files/paginare.php'); $rezultate_pe_pagina = '2'; $statement = "`anunt_standard` where `activat` = 0 AND prs_prv='$filtru_p' "; /* Inceputul stabiliri functiei numaratorelor */ $page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]); $limit = $rezultate_pe_pagina; $startpoint = ($page * $limit) - $limit; //Query pentru afisere si paginare /* Sfarsitul stabiliri functiei numaratorelor */ $url = "{$server_url}anunturi/f/{$_GET['f']}/page/"; echo "<div id='asezare_butoane'>".pagination($statement,$limit,$page,$url)."</div>"; //afiseaza inregistrarile platite $query_pay = mysql_query("SELECT * FROM {$statement} AND activat_plata = '1' AND sters = '0' ORDER BY data_adaugare DESC LIMIT {$startpoint} , {$limit}"); echo "<table border='0' width='950px' style='border-collapse:separate; border-spacing:0px 5px;'>"; $i = 0; while ($row = mysql_fetch_assoc($query_pay)) { include('continut_platit.php'); } echo "</table>"; Edited by poadol, 22 February 2013 - 00:50. |
#3
Posted 22 February 2013 - 00:53
Asta e idea, ma gandeam sa fac o singura intergoare dar nu pot sa le separ pe cele platite sa fie afisate primele cu alta culoare si pe cele sterse ultimile cu alta culoare ). Nustiu ma gandesc ca trebuie sa fie o formula matematica care ar trebuii sa o calculez dar nustiu in ce mod..Ce stiu e asa: Am nr_afiseri_pe_pagini = 2; interogari=3; inregistrari=n; pagini=n;
|
#4
Posted 22 February 2013 - 01:03
Daca vrei sa afisezi rezultatele intr-o pagina de site, culoarea (care doresti) ar trebui sa fie posibil sa le-o dai cu cod CSS ori Javascript sau poate ca este posibil si cu PHP.
Edited by poadol, 22 February 2013 - 01:22. |
#5
Posted 22 February 2013 - 01:24
La culoare ma gandi acuma as putea sa fac o singura interogare sql.. SI anume:
$query = mysql_query("SELECT * FROM {$statement} ORDER BY data_adaugare DESC LIMIT {$startpoint} , {$limit}");Iar de aici la linia <tr style="background-color: #FFFFFF">as putea sa o fac <?php if($_row['activat_plata'] == 1 && $_row['sters'] == 0){echo '<tr style="background-color: #000000">';}elseif(..............Asta nu ar fi o problema dar mai ramne problema sa le afisez primele pe cele care au activat_plata = 1 si ultimile pe cele care au sters = 1 ? Aici nu am nici o idee |
#6
Posted 22 February 2013 - 01:40
Datele acelea (inregistrari platite; inregistrari normale; inregistrari sterse; ) se afla toate intr-un singur tabel in Mysql?
Folosesti codul numai pentru cele cu plata, apoi pentru cele fara plata si la urma pentru cele sterse. sau Daca datele sunt in 3 tabele separate foloseste intai "SQL UNION Operator" = UNION ALL, doar ca va trebui modificat codul sa le ia in ordine grupate cate 2. Edited by poadol, 22 February 2013 - 01:56. |
#7
Posted 22 February 2013 - 01:59
Sunt intr-un singur tabel dar daca fac cum zici tu o sa imi apara de 3 ori paginarea eu vreau o singura paginare:)
|
#8
Posted 22 February 2013 - 02:54
Nu inteleg de ce sa-ti apara de 3 ori paginarea? Poate nu ai inteles ce face SQL UNION ALL Example sau nu stiu ce sa "zic"?
|
#9
Posted 22 February 2013 - 15:06
Am inteles pot sa folosesc UNION
mysql_query("SELECT u.* FROM ( (SELECT * FROM anunt_standard WHERE `activat_plata`='1' AND `sters`='0' AND `activat`='0' ORDER BY data_adaugare DESC) UNION ALL (SELECT * FROM anunt_standard as b WHERE `activat_plata`='0' AND `sters`='0' AND `activat`='0' ORDER BY data_adaugare DESC) UNION ALL (SELECT * FROM anunt_standard WHERE `sters`='1' AND `activat`='0' ORDER BY data_adaugare DESC) )As u LIMIT {$startpoint} , {$limit}")or die(mysql_error()); Dar 'ORder By' nu il ia in calcul.. |
#10
Posted 22 February 2013 - 18:14
sau Daca le vrei ordonate obtine 3 tabele ordonate in mysql cum ai facut pana acuma, le salvezi, dupa care unesti cele 3 tabele cu UNION ALL. SQL ORDER BY Syntax SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC Edited by poadol, 22 February 2013 - 18:16. |
|
#11
Posted 22 February 2013 - 18:19
Nsilviu, on 22 februarie 2013 - 01:24, said:
La culoare ma gandi acuma as putea sa fac o singura interogare sql.. SI anume: $query = mysql_query("SELECT * FROM {$statement} ORDER BY data_adaugare DESC LIMIT {$startpoint} , {$limit}");Iar de aici la linia <tr style="background-color: #FFFFFF">as putea sa o fac <?php if($_row['activat_plata'] == 1 && $_row['sters'] == 0){echo '<tr style="background-color: #000000">';}elseif(..............Asta nu ar fi o problema dar mai ramne problema sa le afisez primele pe cele care au activat_plata = 1 si ultimile pe cele care au sters = 1 ? Aici nu am nici o idee Si de aici ati ajuns la union. N-am habar cum. Ce te opreste sa ordonezi si dupa coloanele alea? ORDER BY activat_plata DESC, sters ASC, data_adaugare DESC |
#12
Posted 22 February 2013 - 19:09
Pentru ca daca folosesc mai multe query nu face bine paginarea..
|
#13
Posted 22 February 2013 - 19:40
Si unde am scris eu despre mai multe query-uri?
SELECT * FROM blabla ORDER BY activat_plata DESC, sters ASC, data_adaugare DESC LIMIT 0, 10 Asta iti aduce rezultatele sortate dupa activat_plata descrescator, adica alea care au 1 primele, apoi cele cu 0. Fiecare grup (cu 1 sau 0) e sortat la randul lui dupa sters (primele o sa fie alea care au sters 0), apoi dupa data_adaugare. Eu am scos in evidenta ca poti sorta dupa mai multe coloane si ca n-ai nevoie de UNION. Ce vrei tu evident nu se face asa defapt. Arhitectura aplicatiei tale e fundamental gresita. Ar trebui sa ai o singura coloana dupa care sortezi, eventual sortezi si dupa data_adaugare. Asta pentru ca e lent sa pui DB-ul sa sorteze dupa (activat_plata AND sters). In schimb poti pune logica asta in PHP, la salvare. O coloana noua, sa zicem sort_order, in care pui 1 daca `activat_plata`='1' AND `sters`='0' AND `activat`='0', 0 daca `activat_plata`='0' AND `sters`='0' AND `activat`='0' si -1 daca `activat_plata`='0' AND `sters`='1' AND `activat`='0' Acum nu-ti mai ramane decat sa select * from blabla order_by sort_order DESC, data_adaugare DESC LIMIT 0, 10. Presupun ca n-ai habar cum functioneaza clasa ta de paginare pentru ca altfel nu-mi dau seama cum te-ai putea astepta sa-ti returneze primele doua rezultate doar din primul query. |
#14
Posted 23 February 2013 - 01:25
Am rezolvat problema pana la urma uitati si ucm pentru cine este interesat:
mysql_query("SELECT u.* FROM ( (SELECT *, data_adaugare AS a, 0 AS b, 0 AS c FROM anunt_standard WHERE `activat_plata`='1' AND `sters`='0' AND `activat`='0') UNION ALL (SELECT *, 0 AS a, data_adaugare AS b, 0 AS c FROM anunt_standard WHERE `activat_plata`='0' AND `sters`='0' AND `activat`='0') UNION ALL (SELECT *, 0 AS a, 0 AS b, data_adaugare AS c FROM anunt_standard WHERE `sters`='1' AND `activat`='0') )As u ORDER BY a DESC, b DESC, c DESC LIMIT {$startpoint} , {$limit}"); Iar pentru culoare am folosit: if($row['activat_plata'] == '1'){$tr = "<tr style='background: #cef0c2 url({$server_url}img/promovat.png) no-repeat right;'>";} elseif($row['activat_plata'] == '0' && $row['sters'] =='0'){$tr = "<tr style='background-color: {$bg_color};'>";} elseif($row['sters'] =='1'){$tr = "<tr style='background-color: #ffc4c7;'>";}Multumesc mult tuturor |
#15
Posted 23 February 2013 - 13:24
Nsilviu, on 23 februarie 2013 - 01:25, said:
Am rezolvat problema pana la urma uitati si ucm pentru cine este interesat: La următoarele abateri, va trebui să trec la warn pentru off-topic. Mulţumesc. |
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users