sortarea unui query in database(MySQL) cu PHP

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

klm_blood
Average Member
Mesaje: 97
Membru din: Mar Mai 05, 2009 8:27 pm

sortarea unui query in database(MySQL) cu PHP

Mesajde klm_blood » Joi Feb 25, 2010 12:03 pm

am urmatorul script:

Cod: Selectaţi tot


<?php session_start();
include("admin/logare/bazadb.php");
include("admin/logare/login.php");
include("includes/functions.inc.php");
include("includes/header.php");


if (isset($_POST['rowsperpage'])){

         $_SESSION['rowsperpage'] = $_POST['rowsperpage'];
         $rowsperpage = $_POST['rowsperpage'];
}
else if (isset($_SESSION['rowsperpage']) && is_numeric($_SESSION['rowsperpage'])){
         $rowsperpage = (int) $_SESSION['rowsperpage'];
}
else {
         $rowsperpage = 30;
}

// Afla cate linii sunt in tabel (MODIFICATI 'nume_tb') din baza de date 
$sql = "SELECT COUNT(*) FROM `produse`"; 
$result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR); 
$r = mysql_fetch_row($result); 
$numrows = $r[0]; 
 
// Stabileste numarul de linii din tabel afisate in pagina
      

// afla numarul total necesar de pagini
$totalpages = ceil($numrows / $rowsperpage);      // ceil face rotunjire la int. maxim
 
// Obtine pagina curenta sau seteaza default
if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) { 
  // seteaza variabila ca int
  $currentpage = (int) $_GET['currentpage']; 
} else { 
  // pagina care este initial afisata (pagina default)
  $currentpage = 1; 
}
 
// daca pagina curenta e mai mare decat total pagini...
if ($currentpage > $totalpages) { 
  // seteaza pagina curenta la ultima pagina 
  $currentpage = $totalpages; 
}
// daca pagina curenta e mai mica decat prima pagina... 
if ($currentpage < 1) { 
  // seteaza pagina curenta la prima pagina   
  $currentpage = 1; 
}
 
// lista cu pagini, in functie de pagina curenta   
$offset = ($currentpage - 1) * $rowsperpage; 
 
$default_sort = 'pr_nume';
$allowed_order = array ('pr_nume');

if (!isset ($_GET['order']) || !in_array ($_GET['order'], $allowed_order))
      {
          $order = $default_sort;
      }
   else
      {
          $order = $_GET['order'];
      }
      
// obtine datele din tabel (MODIFICATI 'nume_tb') din baza de date 
$sql = "SELECT * FROM `produse` ORDER BY $order LIMIT $offset, $rowsperpage"; 
$result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR); 
 
// parcurgerea matricei cu datele obtinute
while ($list = mysql_fetch_assoc($result)) { 
  // Stocheaza datele returnate de MySQL in variabile array pt. fiecare coloana
  $pr_id[] = $list['pr_id'];
  $pr_nume[] = $list['pr_nume'];
  $pr_cat[] = $list['pr_cat'];
  $pr_autor[] = $list['pr_autor'];
  $pr_frecventa[] = $list['pr_frecventa'];
  $pr_pret[] = $list['pr_pret'];
  $pr_nume_fis[] = $list['pr_nume_fis'];
}
mysql_close();   // Incheie conexiunea cu mysql

/*** Afisarea datelor obtinute ***/
// Parcurge variabilele array setate in bucla WHILE

  echo '<table align="center" style="width: 600px; margin-bottom: 10px;" border="1px">
      <thead>
       <tr>
        <th scope="col">ID</th>
        <th scope="col">Nume</th>
       <th scope="col">Gen Muzical</th>
      <th scope="col">Autor</th>
      <th scope="col">Frecventa</th>
      <th scope="col">Pret</th>
        </tr>
       </thead>
      <tbody>';
      
for($i=0; $i<count($pr_id); $i++) {
  // Aici puteti adauga cod HTML pentru aspectul grafic al afisarii

         echo "<tr>";
           echo "<td>" . $pr_id[$i] . "</td>";
           echo "<td>" . $pr_nume[$i] . "</td>";
         echo "<td>" . $pr_cat[$i] . "</td>";
         echo "<td>" . $pr_autor[$i] . "</td>";
         echo "<td>" . $pr_frecventa[$i] . " kb/s</td>";
         echo "<td>" . $pr_pret[$i] . "</td>";
         echo '<td><input type="button" value="Play" onClick="callAS3(\'songs/'.$pr_nume_fis[$i].'\')">';
         if($logged_in) {
            echo '<td><a href="cart.php?action=add&itemid='.$pr_id[$i].'">Adauga in cos</a></td>';
            echo '<td><a href="detalii_negativ.php?id='.$pr_id[$i].'">Detalii</a></td>';            
         }else{
            echo '<td><a href="register.php">Adauga in cos</a></td>';
            echo '<td><a href="register.php">Detalii</a></td>';
         }
         echo "</tr>";


}

echo "</tbody></table>";   
/*** Construirea link-urilor pt. paginare ***/
// raza nr. link-uri din jurul celui curent
$range = 3;
 
// Link-uri inapoi, daca pagina curenta nu e prima
if ($currentpage > 1) { 
  // arata << pt. link la prima pagina 
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><img src=\"includes/style/img/sageti/begin.jpg\" border=\"0px\" /></a> &nbsp; "; 
  // obtine nr. pagina din urma
  $prevpage = $currentpage - 1; 
  // arata < pt. link la o pagina in urma
  echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><img src=\"includes/style/img/sageti/prev.jpg\" border=\"0px\" /></a> &nbsp;"; 
}
 
// definirea link-urilor din raza paginii curente
for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) { 
  // daca e un nr. de pagina valid ...
  if (($x > 0) && ($x <= $totalpages)) { 
    // daca nr. e pagina curenta ... 
    if ($x == $currentpage) { 
      // afiseaza nr. pagina fara a fi link 
      echo ' <span style="font-size: 16px"><b>['.$x.']</b></span> '; 
    // daca nr. nu e pagina curenta ... 
    } else { 
      // il face link 
   echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> "; 
    } 
  }
}
       
// Daca pagina curenta nu e ultima, afiseaza link inainte si spre ultima pagina
if ($currentpage != $totalpages) { 
  // obtine pagina urmatoare
  $nextpage = $currentpage + 1; 
   // arata > pt. urmatoarea pagina   
  echo "&nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'><img src=\"includes/style/img/sageti/next.jpg\" border=\"0px\" /></a> "; 
  //  arata >> pt. ultima pagina
  echo " &nbsp; <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'><img src=\"includes/style/img/sageti/end.jpg\" border=\"0px\" /></a> "; 
}

  echo '<form action="'. $_SERVER['PHP_SELF'] . '" method="post">
        <table>
      <tr>
         <td valign="bottom">
            <input type="submit" name="rowsperpage" class="rowsperpage20" value="20">
         </td>
         <td valign="bottom">
            <input type="submit" name="rowsperpage" class="rowsperpage50" value="50">
         </td>
         <td>
            <input type="submit" name="rowsperpage" class="rowsperpage80" value="80">
         </td>
      </tr>
      </table>
      </form>
      ';


include("includes/footer.php");
?>



$pr_nume este numele produsului
$pr_cat este numele categoriei produsului
$pr_pret este pretul produsului


as vrea sa stiu cum pot face sortarea produselor crescator/descrescator dupa nume, pret si ultimele produse adaugate in baza de date.

un exemplu bun ar fi la eMAG:

http://www.emag.ro/foto_digitale



Avatar utilizator
Xposed
Average Member
Mesaje: 143
Membru din: Mie Ian 11, 2006 9:50 pm
Contact:

Mesajde Xposed » Joi Feb 25, 2010 1:11 pm

Trimiti prin GET ce anume vrei sa sortezi si cum(asc, desc) si in functie de ce primesti prin get pe parametrii respectivi sau daca primesti ceva iti construiesti QUERY`ul asa cum doresti tu.

klm_blood
Average Member
Mesaje: 97
Membru din: Mar Mai 05, 2009 8:27 pm

Mesajde klm_blood » Vin Feb 26, 2010 8:27 am

da... partea cu $_GET o stiu... intrebarea este cum construiesc query-ul?

foreverlost
Average Member
Mesaje: 132
Membru din: Mie Iul 29, 2009 8:06 pm
Localitate: Gaesti

Mesajde foreverlost » Vin Feb 26, 2010 10:34 am

pui sort=desc sau asc ce ai tu si faci un if


Cod: Selectaţi tot

$sort = ''
if (  isset( $_GET[ 'sort' ] ) && trim( $_GET[ 'sort' ] ) != '' )
{
     $sort =  trim( $_GET[ 'sort' ] );
}
if ( $sort == 'asc'  )
{
     $sort = ' ORDER BY camp ASC';
}
elseif ( $sort = 'desc' )
{
   $sort = ' ORDER BY camp DESC';
}

$sql = "SELECT * FROM table " . $sort;


si lista poate continua cu ce vrei tu

klm_blood
Average Member
Mesaje: 97
Membru din: Mar Mai 05, 2009 8:27 pm

Mesajde klm_blood » Vin Feb 26, 2010 4:14 pm

ms pentru raspuns. asta este exact ceea ce cautam...

klm_blood
Average Member
Mesaje: 97
Membru din: Mar Mai 05, 2009 8:27 pm

Mesajde klm_blood » Vin Feb 26, 2010 4:16 pm

Si inca ceva: Daca in loc sa folosesc $_GET folosesc o sesiune care sa salveze setarile de sortare ale userului e ok?

foreverlost
Average Member
Mesaje: 132
Membru din: Mie Iul 29, 2009 8:06 pm
Localitate: Gaesti

Mesajde foreverlost » Vin Feb 26, 2010 5:28 pm

e ok si asa.

Ma bucur ca te-am putut ajuta!

klm_blood
Average Member
Mesaje: 97
Membru din: Mar Mai 05, 2009 8:27 pm

Mesajde klm_blood » Dum Feb 28, 2010 5:08 pm

Mai am o intrebare:

Cum fac ca sa sortez query-ul in functie de cat de recente sunt datele introduse in baza de date?

AndreiD
Average Member
Mesaje: 53
Membru din: Joi Ian 21, 2010 5:47 pm
Localitate: Bucuresti
Contact:

Mesajde AndreiD » Lun Mar 01, 2010 10:46 am

iti trebuie un camp in care treci data introducerii.... si sortezi in functie de el.

ORDER BY data DESC - de exemplu
Php Tutoriale Video Invata PHP ca si cum te-ai uita la un film

klm_blood
Average Member
Mesaje: 97
Membru din: Mar Mai 05, 2009 8:27 pm

Mesajde klm_blood » Lun Mar 01, 2010 5:37 pm

Da mi-am dat seama, dar am uitat sa postez aici... Ms oricum pentru raspuns.


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 22 vizitatori