Php 对mysql数据库中的数据进行排序

Php 对mysql数据库中的数据进行排序,php,mysql,Php,Mysql,好的,显然我的第一个解释不清楚。。。我不确定该说什么。为了简化,我需要做什么才能使用下面的表单成功地搜索我拥有的mysql数据库?我想让用户从下拉菜单中的三个选项中进行选择,然后键入文本进行搜索,并获得与该类别匹配的结果 html文件: <html> <body> <h2>Database Search</h2> <form action="retrieve_data.php" method="POST"&g

好的,显然我的第一个解释不清楚。。。我不确定该说什么。为了简化,我需要做什么才能使用下面的表单成功地搜索我拥有的mysql数据库?我想让用户从下拉菜单中的三个选项中进行选择,然后键入文本进行搜索,并获得与该类别匹配的结果

html文件:

    <html>
    <body>
    <h2>Database Search</h2>

    <form action="retrieve_data.php" method="POST">
    <input type='hidden' name='submitted'>
    Search for your information:
    <select name="field" id="field">
    <option value="id">id</option>
    <option value="name">name</option>
    <option value="username">username</option>
    </select>
    Search item:<input type="text" name='cond' size='20'><br><br>
    <input type="submit">
    </form>
    </body>
    </html>

数据库搜索
搜索您的信息:
身份证件
名称
用户名
搜索项目:

我目前使用的php代码使用复选框进行搜索,我不希望:

 <?php 

 extract($_REQUEST); 

 $fields = 0; 
 $query = "select "; 
 $th = ""; 
 for( $i = 0; $i < count($chk); $i++ )  { 
 if( $chk[$i] )  { 
    $query .= $chk[$i].','; 
    $th .= "<th>".$chk[$i]."</th>"; 
    $fields++; 
  } 
  } 
 $query = rtrim($query,','); 
 $query .= "user"; 
 if(!empty($cond)) { 
 $query .= " where ".$cond; 
 } 
 $query .= " name ".$sorted; 
 $query .= " ".$name; 

 @ $db = new mysqli('localhost','root','','userData'); 

if (mysqli_connect_errno()) { 
echo "Can't connect to Server. Errorcode: ", mysqli_connect_error(); 
exit; 
} 
else { 
echo "Connected successfully<br />"; 
} 

$result = $db->query(stripslashes($query)); 
$numrecs = $result->num_rows; 
echo "Your results: <br />"; 
echo "<b>".$query."</b><br />"; 

echo "<table border='2'>"; 
echo $th; 
for ($i = 0; $i < $numrecs; $i++ )  { 
$row = $result->fetch_array(); 
echo "<tr>"; 
for($f = 0; $f < $fields; $f++ )  { 
    echo '<td>'.$row[$f].'</td>'; 
} 
echo '</tr>'; 
} 
echo "</table>"; 
?> 

查找条目、对它们进行排序并按类别进行选择是MySQL适合的任务

因此,您需要的是一个查询,它使用:

  • A在分类表上
  • A查找“类似”用户输入的内容
  • 还有一种方法来分类它们
  • 此外,您可能需要对项目进行排序(取决于您希望如何排序)

您的查询准备逻辑看起来有点笨拙

我建议您将“表代码”与查询准备逻辑分开。首先准备mysql查询结果对象,然后为表部分编写代码。这是将视图与控制器逻辑分离的基础。当您更改准备结果的方式(控制器代码)时,不需要更改视图代码

并假设数据库查询部分是一个函数(比如
getSortedResult()
),它将用户发布的值作为参数,并返回按某种顺序排序的结果对象。决定传递参数的格式。也就是说,您可以在“选择”类别中选择多个值。然后让我们将数组作为参数

现在,您只需要准备category参数并调用
getSortedResult()
。打印发布的VAL,看看你得到了什么

$postedCategory = $_POST['field']; //dropdown's posted values
print_r($postedCategory);
//you may just need to pass this param.
getSortedResult($postedCategory, $_POST['cond']);
现在,在getSortedResult函数中-

function getSortedResult($categories, $cond)
{
    $db = new mysqli('localhost','root','','userData');

if (mysqli_connect_errno()) {
    echo "Can't connect to Server. Errorcode: ", mysqli_connect_error();
    exit;
}
else 
{
    //Assuming that you have some category field in the same table. If category is a separate table, you will need to do a join, refer Lukas Knuth's answer.
    $query = "select * from table where category in (".implode(",",$categories)." and somefield = '".$cond."' order by <field you want>";

    return $result = $db->query(stripslashes($query));


}

}
函数getSortedResult($categories,$cond) { $db=newmysqli('localhost','root','userData'); if(mysqli\u connect\u errno()){ echo“无法连接到服务器。错误代码:”,mysqli_connect_error(); 出口 } 其他的 { //假设在同一个表中有一些category字段。如果category是一个单独的表,则需要进行连接,请参考Lukas Knuth的答案。 $query=“从表中选择*,其中category位于(“.infrade”(“,”,$categories)。”和somefield='”“$cond.”“order by”; 返回$result=$db->query(条带斜杠($query)); } } 最后,在显示逻辑中,在结果对象上循环并准备表格-

?>
Your results: <br />
<table border="2">
<?php foreach($results as $each) : ?>
    //
    // row preparation
<?php endforeach; ?>
</table>
?>
您的结果:
// //行准备
那么,您基本上有两个问题?1.我需要创建什么来让程序搜索用户键入的单词(并在正确的类别中搜索)?2.另外,我希望我的新结果仍然返回到这个表中,所以我可以保留我所做的任何表代码工作吗?我说的对吗?你在mysql查询部分需要帮助吗?还有,你所说的“表代码”到底是什么意思?是的,这是我的两个问题。我(最后!)我把mysql部分搞定了。表代码指的是我所有的and等等。假设你已经修复了mysql查询部分,那么现在和以前mysql查询的结果有什么区别?我猜你仍然得到相同的结果对象,其中包含多条记录,每个记录都包含一些字段。哦,等等。你是说要改变我的查询方式吗想要检索我的数据,我需要改变mysql查询的现状吗?在这种情况下,不,我没有改变它/不知道我必须改变。我会从头开始,但我不确定如何再次达到现在的状态…@rwqq如果你的PHP代码有问题,请发到这里。如果你的mysql表有问题,请cture-在此处发布。如果您在SQL查询方面有问题,请在此处发布。当前您的帖子只有HTML代码,这本身就很好。嗯……当我运行此操作时,会出现以下两个错误……您知道我做错了什么吗?
警告:inpode()[function.inpode]:传递的参数无效
警告:为foreach()提供的参数无效
因此您只提交单个值作为
字段
下拉列表的值。在这种情况下,它不是数组。请验证$\u POST['field']的值。向mysql查询添加一个条件,
如果(is_array($categories))$whereCond=“In”“。内爆(,”,$categories);else$wherecond=“=”$categories;
好的,严肃的最后一个问题…哈哈(顺便说一下,非常感谢你的帮助!)这到底应该放在哪里?我放在哪里仍然不起作用。你有我可以联系你的直接电子邮件吗?我有兴趣得到你对另一个项目的帮助(为了钱)如果你感兴趣…@rwqq,回复你的邮件。你说的“这到底应该去哪里?”是指我说的if-else条件吗?它应该放在
getSortedResult()函数中。