When I search a word "apple" the script is showing the result in the following order:
(1) appletree (2) juiceapple (3) apple
But I want to reorder the search result in the following order:
(1) apple (2) appletree (3) juiceapple
As you can see the above order is exactly what I want in which the result is showing according to the searched term which was "apple"
//get date
$button = $_GET['submit'];
$search = $_GET['search'];
if (!$button)
echo "Please fill out the form";
else
{
if (strlen($search)<=2)
echo "The item you searched for was to small";
else
{
echo "You searched for <b>$search</b> <hr size='1'>";
//connect to database
mysql_connect('localhost','wnumber','passowrd');
mysql_select_db('wnumber');
//explode search term
$search_exploded = explode(" ",$search);
foreach($search_exploded as $search_each)
{
$str = mysql_real_escape_string(substr($search_each, 0, 4));
//construct query
$x++;
if ($x==1) $construct .= "keywords LIKE '$str%'";
else $construct .= " OR keywords LIKE '$str%'";
}
//echo out construct
$construct = "SELECT * FROM word WHERE $construct";
$run = mysql_query($construct);
$foundnum = mysql_num_rows($run);
if ($foundnum==0)
echo "No results found.";
else
{
echo "$foundnum results found.<p><hr size='1'>";
while ($runrows = mysql_fetch_assoc($run))
{
//get data
$meaning = $runrows['meaning'];
$keywords = $runrows['keywords'];
echo "<b>$keywords</b><br>
<b>$meaning</b><br>
}
}
}
}
use order by asc
$construct = "SELECT * FROM word WHERE $construct ORDER BY [Field Name from which you want ascend your search ] ASC";
try
ORDER BY keyword Asc
To get the desired result
使用ORDER BY keywords ASC
,它将为您提供预期的适当结果。
除了升序以外,如果您对长度的担心意味着请尝试LENGTH()
$construct = "SELECT * FROM word WHERE $construct order by LENGTH(`keywords`)
I assume that you have multiple keywords for every row. You are getting all these results because you are searching for any words that contains word apple
.
To get exact results first, and then only results that contain the word, do it like this:
As you have multiple keywords for every row, you can't use =
operator. But you must use some separator
in your table to separate the keywords from each other. Let's assume its " " (whitespace).
So if your table and column "keywords" looks like this for example
| id | name | keywords |
| 1 | apple | apple fruit sweet |
You can search for results like this:
SELECT * FROM table t1
WHERE
keywords LIKE "% $keyword %" /* Notice whitespaces around the variable */
OR
keywords LIKE "$keyword %" /* This is for keywords that arent separated from left */
OR
keywords LIKE "% $keyword" /* This is for keywords that arent separated from right */
UNION DISTINCT /* Distinct is there because we want to show every result just once */
SELECT * FROM table t1
WHERE
keywords LIKE "%$keyword%"
PS: separator could be any string or character, it doesnt have to be whitespace
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.