2013-03-25 98 views
0

嗨什么是最好的方式来做一个'查询'的查询而不执行查询的另一次?比方说,我有一个搜索查询时,我必须找到使用表单名称或姓氏,一个例子:搜索查询顺序由asc或desc

 //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"; 


    } 

之后我搜索“的名称在ASC模式(ORDER BY名称ASC)我怎样才能显示名称或姓名LIKE%surname%“,而不再执行SQL查询?我想例如,当我搜索名称包含“非物质文化遗产”这个词有这样一个列表:

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

回答

0

我真的不认为我正确理解你的问题,但我要去在这里出现一个肢体并猜测你只是想通过两个不同的列来订购?

$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; 
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用通配符“艺术”的搜索将匹配巴特,亚瑟·卡特,以及任何其他的字与它的“艺术”。

+0

感谢您的回复,但我想先显示一个结果(不反转),并添加一个链接以显示第二个(反转)。 – Alex 2013-04-06 14:18:03

+0

所以你想在第一页上拉一个查询并在第二页上重新使用它? – 2013-04-07 17:47:21