如何编写Orderby子句以及where where子句对数据进行排序

时间:2018-02-02 09:25:56

标签: php sorting mysqli

您好我在表中尝试排序mysql数据但我的问题是我的查询正在排序我的表看起来像的所有数据

Word        | Meaning                  | Synonym      | Antonym
definitely  | without doubt            | certainly    |possibly
great       | of an extent, amount     | considerable |little
zeal        | great energy             | passion      | indiference
zealot      | a person who is fanatical|fanatic       | moderate
zealous     | having or showing zeal.  | fervent      | apathetic

so when i search lets say word starting wit z then i get
Word        | Meaning                  | Synonym      | Antonym
zeal        | great energy             | passion      | indiference
zealot      | a person who is fanatical|fanatic       | moderate
zealous     | having or showing zeal.  | fervent      | apathetic

现在我想对这些搜索到的数据进行排序,但我的排序查询正在对所有数据进行排序 我的商店程序看起来像

CREATE DEFINER=`root`@`localhost` PROCEDURE `SortContent`()
BEGIN
SELECT * from dictionarysearch ORDER BY word ASC;
END

我的PHP代码就像

<?php

if(isset($_GET['search_btn'])){
  $search=$_GET['search'];
  $result=GetWords(mysqli_escape_string($conn,$search));
}
/*if(isset($_GET['q'])){
      $id=$_GET['q'];
      $result=GetWordsById($id);
    }*/
    if(isset($_GET['sort'])){
      $sort=$_GET['sort'];
    }
    if(isset($_GET['sort'])){
      if($sort=="asc"){
        $result=SortContent();//Here i'm calling  a function which is calling the store procedure
      }
      if($sort=="desc"){
        $result=SortContent2();
      }

    }


    else{
  $result=GetAdminWords();
}
  if(mysqli_num_rows($result)>0)
  ?>  
    <thead>
      <tr>

        <th>Word</th>
        <th>Meaning</th>
        <th>Synonym</th>
        <th>Antonym</th>

      </tr>
    </thead>
    <?php
    while($row=mysqli_fetch_array($result)){
    ?>
      <tbody>
        <tr>

          <td><a href="view.php?q=<?php echo $row['id'];?>"><?php echo $row['word'];?></a></td>
          <td><?php echo $row['meaning'];?></td>
          <td><?php echo $row['synonym'];?></td>
          <td><?php echo $row['antonym'];?></td>
         <td><a href="admin.php?id1=<?php echo $row['id'];?>"><i class="fa fa-edit"></i></a> <a onClick="javascript: return confirm('Please confirm deletion');" href="view.php?id=<?php echo $row['id'];?>"><i class="fa fa-trash"></i></a> </td>
        </tr>
      </tbody>
      <?php
  }?>


  </table>

所以我想知道我如何编写一个查询,以便它只对所选数据进行排序,并设置了id autoincrement

1 个答案:

答案 0 :(得分:1)

无需为此使用存储过程。我建议以下代码适合您...

<?php

if(isset($_GET['search_btn']) && strlen($_GET['search'])){
    $search = mysqli_escape_string($conn,$_GET['search']);
    $sql = "SELECT * FROM dummydata WHERE info LIKE '".$search."%'";
    if(isset($_GET['sort']) && in_array($_GET['sort'], array('ASC', 'DESC'))){
        $sort=$_GET['sort'];
        $sql .= " ORDER BY info ".$sort;
    }
    //echo "<h3>".$sql."</h3>";

    if (($result=mysqli_query($conn,$sql))!==false) {
    ?>  
    <thead>
      <tr>
        <th>Word</th>
        <th>Meaning</th>
        <th>Synonym</th>
        <th>Antonym</th>

      </tr>
    </thead>
    <tbody>

    <?php
     while ($row=mysqli_fetch_assoc($result)){
        //echo "<pre>".var_export($row,true)."</pre>";
     ?>
        <tr>
          <td><a href="view.php?q=<?php echo $row['id'];?>"><?php echo $row['word'];?></a></td>
          <td><?php echo $row['meaning'];?></td>
          <td><?php echo $row['synonym'];?></td>
          <td><?php echo $row['antonym'];?></td>
          <td>Your action url here.... </td>
        </tr>
      <?php } ?>
        </tbody>
   </table>
   <?php   
    } else {
        echo "<h3>Problem with SQL</h3>";
    }
}

?>

我希望这会有所帮助。