0

こんにちは、もう一度クエリを実行せずに、クエリから「order by」を実行する最良の方法は何ですか? フォームを使用して名前または姓を検索する必要がある場合、検索クエリがあるとします。例:

     //Array for storing WHERE part of query
   $where=array();  

   if(!empty($name)) AND !empty($surname)){
         $where[]="Name LIKE '%$name%'" .
            "AND Surname LIKE '%$surname%'";
   }
   elseif(!empty($name)){
        $where[]="Name LIKE '%$name%'";
   }
   elseif(!empty($surname)){
       $where[]="Surname LIKE '%$surname%'";
   }

   $where = implode(' AND ', $where);

   $sql="SELECT Name,Surname FROM TABLE WHERE $where ORDER BY Name DESC";

   $res = mysql_query($sql);

   while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
           $name    = $row[0];
           $surname    = $row[1];
           echo"$name";
           echo"$surname";


    }

「Name LIKE %surname%」で検索した後、SQL クエリを再度実行せずに、名前または姓を ASC モード (ORDER BY Name ASC) で表示するにはどうすればよいですか? たとえば、「ich」単語を含む名前を検索すると、次のようにリストが表示されます。

  MICHAEL
  PICHAEL
  XICHAEL
    => the ASC mode
  XICHAEL
  PICHAEL
  MICHAEL
   => the DESC mode
4

2 に答える 2

0

このような配列の順序を逆にすることについて話しているのですか?

<?php

  //Array for storing WHERE part of query
   $where=array();  

   if(!empty($name) && !empty($surname)){
         $where[]="Name LIKE '%$name%'" .
            "AND Surname LIKE '%$surname%'";
   }
   elseif(!empty($name)){
        $where[]="Name LIKE '%$name%'";
   }
   elseif(!empty($surname)){
       $where[]="Surname LIKE '%$surname%'";
   }

   $where = implode(' AND ', $where);

   $sql="SELECT Name,Surname FROM TABLE WHERE $where ORDER BY Name";

   $res = mysql_query($sql);

    $names = array();
    $surnames = array();
    $wholeNames = array();

    $x='0';
   while ($row = mysql_fetch_array($res)) {

           if(!empty($row['Name'])){
                $names[$x] = $row['Name'];
           }
           if(!empty($row['Surname'])){
                $surnames[$x] = $row['Surname'];
           }

           if(!empty($row['Name'])&&!empty($row['Surname'])){
             $wholeNames[$x] = $row['Name'].' '.$row['Surname'];
           }
          $x++; 
    }
print "<pre>\n";
print_r ($names);
print_r ($surnames);
print_r ($wholeNames);
print "</pre>\n";

$reversed_names=array_reverse($names);
$reversed_surnames=array_reverse($surnames);
$reversed_wholeNames=array_reverse($wholeNames);

print "<pre>\n";
print_r ($reversed_names);
print_r ($reversed_surnames);
print_r ($reversed_wholeNames);
print "</pre>\n";


?>

ワイルドカードを使用して LIKE を使用している場合、"Art" を検索すると、Bart、Arthur、carter などの "Art" を含む単語が一致します。

于 2013-03-26T00:32:24.420 に答える
0

私はあなたの質問を正しく理解しているとは本当に思いませんが、ここで手足に出て、2つの異なる列で注文したいだけだと思いますか?

 $sql="SELECT Name,Surname FROM TABLE WHERE $where ORDER BY Name DESC, Surname ASC";

"ちなみに、クエリ文字列に余分なものがありました

また、mysql_fetch_assoc代わりに使用することを検討することもできますmysql_fetch_array

これは今、私がつまらないことです...しかし、使用する代わりに:

    echo"$name";
    echo"$surname";

あなたはただ書くことができます:

echo $name;
echo $surname;
于 2013-03-25T23:44:28.847 に答える