1

「apple」という単語を検索すると、スクリプトは次の順序で結果を表示しています。

(1) アップルツリー (2) ジュースアップル (3) アップル

しかし、検索結果を次の順序で並べ替えたい:

(1) りんご (2) りんごの木 (3) ジュースりんご

ご覧のとおり、上記の順序はまさに私が求めているものであり、「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>

       }

     }



    }
}
4

5 に答える 5

2

ascによる注文を使用

$construct = "SELECT * FROM word WHERE $construct ORDERBY[検索を昇格するフィールド名]ASC";

于 2012-12-18T07:30:51.523 に答える
2

試す

ORDER BY キーワード Asc

望ましい結果を得るには

于 2012-12-18T07:40:17.333 に答える
1

長さが気になる場合は昇順以外を試してみてくださいLENGTH()

$construct = "SELECT * FROM word WHERE $construct order by LENGTH(`keywords`)
于 2012-12-18T07:38:53.457 に答える
1

使用ORDER BY keywords ASCすると、期待どおりの適切な結果が得られます。

于 2012-12-18T07:34:34.263 に答える
1

すべての行に複数のキーワードがあると仮定します。word を含む単語を検索しているため、これらすべての結果が得られますapple

最初に正確な結果を取得し、次に単語を含む結果のみを取得するには、次のようにします。

  1. 「apple」という単語に完全に一致する結果を検索する
  2. 「apple」という単語を含む結果を検索します

すべての行に複数のキーワードがあるため、=演算子は使用できません。ただし、テーブルで someseparatorを使用して、キーワードを互いに分離する必要があります。その " " (空白)を仮定しましょう。

たとえば、テーブルと列の「キーワード」が次のようになっている場合

| id | name  | keywords |
| 1  | apple | apple fruit sweet |

次のような結果を検索できます。

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: セパレーターは任意の文字列または文字にすることができます。空白である必要はありません

于 2012-12-18T07:52:05.813 に答える