как отсортировать набор результатов MySQL после выполнения запроса - PullRequest
0 голосов
/ 27 декабря 2010

Я пишу запрос для базы данных mysql, имеющей 2 параметра.

Базовый поиск, но проблема в том, что я хочу отсортировать результаты по результатам выбора. Поэтому после того, как я нажал кнопку search и браузер отобразил набор результатов, я хочу заказать этот конкретный набор результатов с expiration-date или price в зависимости какую кнопку я нажимаю.

   //SELECTION DATA FORM 
   <form action="EVENTS_SELECTION.PHP">
     <select name="Type">
     <option value="">SPORT
     <option value="">CULTURE       
     <option value="">LEISURE
     <option value="">GASTRONOMY
     </select>  

     <select name="WHERE">
     <option>ROME ALL
     <option>ROME SOUTH
     <option>ROME WEST
     <option>ROME EAST
     <option>ROME NORTH
     </select>

     <input type="submit" value="search">   
 </form> 

как мне этого добиться ?? Спасибо Лука

Ответы [ 2 ]

0 голосов
/ 27 декабря 2010

[Сторона сервера] Сохраните результат php-запроса в массив, как показано ниже:

// if you want to sort by column 'name', store them by format: $dataset[{pid}] = {name};
// pid  name
//  1   test1
//  2   alpha1
//  5   candy1
while (...) // read query result
{
    $dataset[$row['pid']] = new array($row['name'] => $row);
}    
// now, use sort()
sort($dataset);

// then foreach array to get sorted data;
foreach ($datasetas $key => $val) {
    echo $val."\n";
}

[Клиентская сторона] Прочитайте данные и сохраните их в формате JSON и ответе. Затем на своей странице используйте библиотеку javascript json для их сортировки.

0 голосов
/ 27 декабря 2010

Если вы хотите сортировать после поиска, вы можете использовать usort () function:

function myComparer($a, $b)
{
    if ($GLOBALS['SEARCH_TYPE'] == 'PRICE')
    {
        $valueA = floatval($a['price']);
        $valueB = floatval($b['price']);
    }
    else ($GLOBALS['SEARCH_TYPE'] == 'EXPIRATION-DATE')
    {
        // time string to UNIX timestamp integer value
        $valueA = strtotime($a['expiration_date']);
        $valueB = strtotime($b['expiration_date']);
    }

    if ($valueA == $valueB) {
        return 0;
    }

    return ($valueA < $valueB) ? -1 : 1;
}

include './get_search_type.php';
// is stored in array $GLOBALS['SEARCH_TYPE']

include './get_search_result.php'; xyz is the field name
// is stored in array $GLOBALS['SEARCH_RESULT'][xyz]

usort($GLOBALS['SEARCH_RESULT'], myComparer);

btw: По моему мнению, лучше генерировать динамический запрос для сортировки по СУБД(это намного проще):

if ($GLOBALS['SEARCH_TYPE'] == 'PRICE')
{
    $query = "SELECT * FROM Products ORDER BY price;";
}
else ($GLOBALS['SEARCH_TYPE'] == 'EXPIRATION-DATE')
{
    $query = "SELECT * FROM Products ORDER BY expiration_date;";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...