Поиск результатов в БД MySQL

237
26 ноября 2016, 20:11

Данный скрипт выводит все найденные результаты по маске из таблицы users. Как сделать так, чтобы при нажатии на кнопку Город, сортировал по алфавиту?

<div class="resultat"><table> 
    <tbody><tr><th>Город:</th><th>Компания:</th><th>Телефон:</th><th>Категория:</th><th>Дата:</th></tr> </div> 
    <?php 
require 'scripts/connect.php'; 
 
$sql_select = "SELECT * FROM users"; 
$result = mysql_query($sql_select); 
$row = mysql_fetch_array($result); 
 
do 
{ 
	printf("<tr> 
<td>" .$row['name'] . "</td> 
<td>" .$row['last_name'] ."</td> 
<td>" .$row['email'] . "</td> 
<td>" .$row['facebook'] . "</td> 
<td>" .$row['time'] . "</td> 
</tr>"); 
} 
while($row = mysql_fetch_array($result)); 
 
 
?></tbody></table>

Answer 1

Предположим, что Вы хотите сделать, чтобы при нажатии на ячейку шапки город, сортировка шла по столбцу city таблицы mysql. Тогда решение будет такое:

<div class="resultat"><table>
    <tbody><tr><th><a href="page.php?sort=city" title="сортировать по полю город">Город</a>:</th><th>Компания:</th><th>Телефон:</th><th>Категория:</th><th>Дата:</th></tr> </div>
    <?php
        require 'scripts/connect.php';
        $sqlAdd = (!empty($_GET["sort"]) && $_GET["sort"]=='city') ? " Order by city" : "";
        $sql_select = "SELECT * FROM users".$sqlAdd;
        $result = mysql_query($sql_select);
        $row = mysql_fetch_array($result);
        do
        {
            printf("<tr>
        <td>" .$row['name'] . "</td>
        <td>" .$row['last_name'] ."</td>
        <td>" .$row['email'] . "</td>
        <td>" .$row['facebook'] . "</td>
        <td>" .$row['time'] . "</td>
        </tr>");
        }
        while($row = mysql_fetch_array($result));
    ?>
</tbody></table>
Answer 2

Можно сортировать на стороне сервера, также можно на стороне клиента.

Чтобы сортировать на стороне сервера необходимо на сервер передать признак критерия сортировки и исходя от того признака составить sql выражение. Например, при нажатии на кнопку Город запросом GET передается параметр sort=city. А скрипт измениться примерно так:

$orderBy = '';
if (isset($_GET['sort'])) {
    switch ($_GET['sort']) {
         case 'city': $orderBy = ' order by `city`'; break;
         case '-city': $orderBy = ' order by `city` desc'; break;
    }
}
$sql = 'select * from `users`' . $orderBy;

Если сортировка производится на стороне клиента тогда можно использовать готовые скрипты типа https://datatables.net/examples/basic_init/table_sorting.html.

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

READ ALSO
Вопрос насчет обработчика php

Вопрос насчет обработчика php

Созрел такой вопрос: Есть форма, пользователь вводит данные, форма передаёт на обработчик, например sendphp, тот в свою очередь соединяется с mySql и вносит...

267