2014-01-26 5 views
-1

Я создаю базу данных онлайн-книг, и у меня есть этот скрипт php для поиска через mysql db и получения результатов. По какой-то причине результаты являются случайными. Есть ли кто-нибудь, чтобы отсортировать их по автору? (Имя для автора поля = search_author в форме и Автор в столбце MySQL.)Сортировка результатов MySQL по алфавиту

$search_titles=$_POST["search_titles"]; 
$search_authors=$_POST["search_authors"]; 
$search_shelf=$_POST["search_shelf"]; 
$search_genre=$_POST["search_genre"]; 

//////////////////////////////////////////////////////////////// 
//build the mySQL query string. Required something like this (the uppercase kwords are SQL commands): 
//SELECT * FROM booklist WHERE Title LIKE 'Computing' AND Author LIKE 'borg' 
//Instead of AND, you might want to try OR 

$query_string ="SELECT * FROM booklist WHERE "; 

$insert_AND = false; //a flag to indicate when an AND keyword needs to be inserted 

//only include search terms/fields that have been specified in form (not empty, but note that a bunch of spaces will be treated as non-empty ... to-fix by validating form) 
if ($search_titles != ""){ 
    $query_string .= "Title LIKE '%".$search_titles."%'"; //the % is a wild card 
    $insert_AND = true; 
} 

if ($search_genre != ""){ 
    $query_string .= "Genre LIKE '%".$search_genre."%'"; //the % is a wild card 
    $insert_AND = true; 
} 

if ($search_authors != ""){ 
    if ($insert_AND) $query_string .= " AND "; //you might want to 
    $query_string .= "Author LIKE '%".$search_authors."%'"; 
    $insert_AND = true; 
}  

if ($search_shelf != ""){ 
    if ($insert_AND) $query_string .= " AND "; 
    $query_string .= "ShelfNumber LIKE '%".$search_shelf."%'"; 
}  

//echo($query_string); 
//done building the query string 
////////////////////////////////////////////////////////////////////// 

//perform the query on the db using the query string 
$result_array = mysql_query($query_string)or die(mysql_error()); 

//The sql server will return a 2D array containing the results (if any). 
//Output these to the browser 
if(mysql_num_rows($result_array)==0){ //i.e. an empty array was returned, meaning no results 
    echo "NO MATCHES FOUND"; 
}else{  //mathces found 

    echo mysql_num_rows($result_array) . " results found <BR><HR>";  

    while ($row = mysql_fetch_assoc($result_array)) { //loop through the array, each time displaying a result from the next row, until all rows have been displayed 
     echo "<B>Title: </B>" . $row['Title'] . "<BR>"; 
     echo "<B>Author: </B>" . $row['Author']. "<BR>"; 
     echo "<B>Genre: </B>" . $row['Genre']. "<BR>"; 
     echo "<B>Shelf: </B>". $row['ShelfNumber']. "<BR>"; 
     //note that the other fields (e.g. genre, etc) are also in the array since in the query string '*' (i.e. all fields) was specified. 
     echo "<HR>"; 
    } 

} 

ответ

1

В конце вашего запроса поставить это:

ORDER BY search_author ASC 
1

Для порядка его автор вы хотите добавить ORDER BY пункт к вашему запросу:

if ($search_authors != ""){ 
    if ($insert_AND) $query_string .= " AND "; //you might want to 
    $query_string .= "Author LIKE '%".$search_authors."%' ORDER BY Author ASC"; 
    $insert_AND = true; 
} 

MySQL Documentation: Sorting options

Ссылаясь на существующий ответ, это неправильно поняли, как указано спрашивающий:

Имя для автора поля = search_author в форме и Автор в столбце MySQL.

Это должно быть ORDER BY Author ASC не ORDER BY search_author ASC.

EDIT 1:

Для того, чтобы заставить его работать должным образом в случае, если он добавлен запрос, вы должны поставить if ($search_authors != ""){ ниже if ($search_shelf != ""){

Смежные вопросы