2014-10-24 5 views
-1

Я строю поиск базы данных с использованием PHP, и я хочу иметь возможность сортировать результаты на основе их разных классификаций.PHP Сортировка результатов базы данных

По умолчанию сообщения должны быть заказаны в последнее время для самых старых. На данный момент я просто стараюсь, чтобы остальные сортировали A-Z в порядке возрастания, но хотели бы сделать оба A-Z восходящим и нисходящим.

<?php 

// Determine the sort... 
// Default is by registration date. 
$sort = (isset($_GET['sort'])) ? $_GET['sort'] : 'sort_date'; 

// Determine the sorting order: 
switch ($sort) { 
    case 'sort_neighborhood': 
     $order_by = 'Neighborhood ASC'; 
     break; 
    case 'sort_method': 
     $order_by = 'Method ASC'; 
     break; 
    case 'sort_category': 
     $order_by = 'Category ASC'; 
     break; 
    case 'sort_price': 
     $order_by = 'Price ASC'; 
     break; 
    case 'sort_condition': 
     $order_by = 'Condit ASC'; 
     break; 
    case 'sort_date': 
     $order_by = 'Date ASC'; 
     break; 
    default: 
     $order_by = 'Date DESC'; 
     $sort = 'sort_date'; 
     break; 
} 

// Connects to your Database 
$con = mysqli_connect('localhost', 'admin', 'password', 'Listings') OR die ('Could not connect to MySQL: ' . mysqli_connect_error()); 

$q = "SELECT Name, Email, Neighborhood, Method, Title, Category, Description, Price, Condit, Photo, Date FROM Listings"; 
$r = @mysqli_query ($con, $q); //Run the query. 
// Count the number of returned rows: 
$num = mysqli_num_rows($r); 

if ($num > 0) { 

    // Print 
    echo '<table align="center"> 
      <tr> 
       <td>Name</td> 
       <td>Email</td> 
       <td><a href="Retrieve.php?sort=sort_neighborhood">Neighborhood</a></td> 
       <td><a href="Retrieve.php?sort=sort_method">Method</a></td> 
       <td>Title</td> 
       <td><a href="Retrieve.php?sort=sort_category">Category</a></td> 
       <td>Description</td> 
       <td><a href="Retrieve.php?sort=sort_price">Price</a></td> 
       <td><a href="Retrieve.php?sort=sort_condition">Condition</a></td> 
       <td>Photo</td> 
       <td><a href="Retrieve.php?sort=sort_date">Date</a></td> 
      </tr>'; 
    // Fetch and print all the records: 
    while ($row = mysqli_fetch_assoc($r)) { 
     $split = explode("/home/xyz/public_html", $row['Photo']); 
     $base = $split['0']; 
     $src = $split['1']; 

     echo '<tr> 
      <td align="left">' . $row['Name'] . '</td> 
      <td align="left">' . $row['Email'] . '</td> 
      <td align="left">' . $row['Neighborhood'] . '</td> 
      <td align="left">' . $row['Method'] . '</td> 
      <td align="left">' . $row['Title'] . '</td> 
      <td align="left">' . $row['Category'] . '</td> 
      <td align="left">' . $row['Description'] . '</td> 
      <td align="left">' . $row['Price'] . '</td> 
      <td align="left">' . $row['Condit'] . '</td> 
      <td align="left"><img src=" ' . $src . '"></td> 
      <td align="left">' . $row['Date'] . '</td> 
     </tr> 
     '; 
    } 
    echo '</table>'; 
       mysqli_free_result ($r);  
    } else { // If no records were returned. 
    echo '<p class="error">There are currently no posts.</p>'; 
    } 

mysqli_close($con); 
?> 
+0

вам нужно два параметра, а затем: один для поля для сортировки, и еще один для направления. например 'example.com/script.php & field = condit & direction = desc' –

+0

@MarcB Я что-то упустил? он может просто добавить порядок в $ order_by к запросу ... У него уже есть эта строка – baao

+0

@michael: «но хотелось бы сделать оба восходящего нисходящего». либо у вас есть два параметра, либо вы удваиваете количество вариантов, поэтому у вас есть 'foo asc' и' foo desc'. в любом случае, вы удваиваете ЧТО-ТО. –

ответ

1

Добавить в запрос:

$q = "SELECT Name, Email, Neighborhood, Method, Title, Category, Description, Price, Condit, Photo, Date FROM Listings"; 

это:

ORDER BY '$order_by' 

после ОТ ПРЕДЛОЖЕНИЙ

0

все, что вам нужно сделать, это сцепить $order_by с $q

$q.="ORDER BY "; 
$q.=$order_by; 

и ваша команда mysql будет так

mysqli_query=($con,$q) 
Смежные вопросы