сортировка по XXX сортировка по ASC или DESC, динамическое упорядочение, mysql ... - PullRequest
1 голос
/ 24 августа 2011

это скорее запрос, чем проблема.Я хотел бы создать динамическую сортировку для моих результатов базы данных MySQL.В настоящее время я вывожу результаты с запросом.Я хотел бы создать 2 ссылки, которые бы сортировали результаты по этой выбранной ссылке, нажмите еще раз и ссылку ASC или DSEC на результаты.

Я искал, но не могу найти правильный способ сделать это.

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

TITLE TOTAL

Как бы просто это не звучало, я не могу найти динамический пример в Интернете.

Кто-нибудь еще, обнаруживший, Google предоставляет больше результатов устаревшима форумы чем реально полезные страницы?Даже если вы сортируете по прошлому году и актуальности.Надеюсь, кто-нибудь может дать мне совет по этому поводу, спасибо

Ответы [ 4 ]

4 голосов
/ 24 августа 2011
<?php

    $order = ($_GET['order'] == 'asc') ? 'asc' : 'desc';

    $sql = "SELECT .... FROM ... WHERE ... ORDER BY TITLE $order";
    mysql_query($sql) or die(mysql_error());
    ...

     $new_order = ($order == 'asc' ) ? 'desc' : 'asc';
?>

<table>
<thead><tr>
    <th><a href="scriptname.php?order=<?php echo $new_order ?>">TITLE</a></th>
    <th>Total</th>
</tr></thead>
etc....
3 голосов
/ 24 августа 2011
<?php
    // build the basis for the query
    $sql = '
        SELECT 
            `id`,
            `title`,
            `total`
        FROM 
            `my_table`
    ';

    // check for sort field
    $sort_by = isset($_GET['s']) ? $_GET['s'] : false;
    // validate the sort field (avoid Bobby Tables!) and provide default
    switch ($sort_by) {
        case 'title':
        case 'id':
        case 'total':
            break;
        default:
            $sort_by = 'id';
    }

    $sql .= ' ORDER BY '.$sort_by.' ';

    // get the direction, or use the default
    $direction = isset($_GET['d']) ? $_GET['d'] : false;
    if ($direction != 'ASC' && $direction != 'DESC')
        $direction = 'DESC';
    $sql .= $direction;

    // execute query, get results
    $res = mysql_query($sql);
    $results = array();
    if ($res) {
        while ($r = mysql_fetch_assoc($res)) {
            $results[] = $r;
        }
    }

    // used in table heading to indicate sort direciton
    $sort_arrow = ($direction == 'ASC' ? '<img src="up_arrow.png" />' : '<img src="down_arrow.png" />');

    // used to build urls to reverse the current sort direction
    $reverse_direction = ($direction == 'DESC' ? 'ASC' : 'DESC');
?>

<table>
    <thead>
        <th scope="col" class="<?php echo $sort_by == 'id' ? 'sortColumn' : ''; ?>">
            <a href="myscript.php?s=id&d=<?php echo $reverse_direction; ?>">ID</a>
            <?php echo $sort_by == 'id' ? $sort_arrow : ''; ?>
        </th>
        <th scope="col" class="<?php echo $sort_by == 'id' ? 'sortColumn' : ''; ?>">
            <a href="myscript.php?s=title&d=<?php echo $reverse_direction; ?>">Title</a>
            <?php echo $sort_by == 'title' ? $sort_arrow : '';  ?>
        </th>
        <th scope="col" class="<?php echo $sort_by == 'id' ? 'sortColumn' : ''; ?>">
            <a href="myscript.php?s=total&d=<?php echo $reverse_direction; ?>">Total</a>
            <?php echo $sort_by == 'total' ? $sort_arrow : '';  ?>
        </th>
    </thead>
    <tbody>
        <?php
            if (count($results) > 0) {
                foreach ($results as $r) {
                    print '<tr>';
                    print '<th scope="row">'.$r['id'].'</th>';
                    print '<td>'.$r['title'].'</td>';
                    print '<td>'.$r['total'].'</td>';
                    print '</tr>';
                }
            } else {
                print '<tr><td colspan=3>No results found</td></tr>';
            }
        ?>  
    </tbody>
</table>
0 голосов
/ 24 августа 2011

Вы можете взять переменную сортировки из URL с помощью $ _GET ['sort'], например.site.php? sort = ASC и передайте его на запрос, помните о проверках работоспособности!

0 голосов
/ 24 августа 2011

это то, как я это делал в C #, вы можете использовать сессию вместо viewstate, остальное будет таким же.

if (Convert.ToString(ViewState["sortField"]) == SortExpression){
if (ViewState["sortDir"].ToString() == "ASC")
        { ViewState["sortDir"] = "DESC"; }
    else
        { ViewState["sortDir"] = "ASC"; }
    }
else
{ ViewState["sortDir"] = "ASC"; }
ViewState["sortField"] = SortExpression;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...