我有以下代码,效果很好:
///////////////////////
$todo=$_POST['todo'];
if(isset($todo) and $todo=="search"){
$species=$_POST['species'];
$lab_section=$_POST['lab_section'];
$search_text=$_POST['search_text'];
$type=$_POST['type'];
$query="select * from mytable where ";
if(strlen($species) > 0 ){
$query.= " species='$species' and ";
}
if(strlen($lab_section) > 0 ){
$query.= " lab_section='$lab_section' and ";
}
////////////////////////// Key word search query /////////
$search_text=ltrim($search_text);
$search_text=rtrim($search_text);
if(strlen($search_text)>0){
if($type<>"any"){
$query .=" name='$search_text'";
}else{
$kt=split(" ",$search_text);//Breaking the string to array of words
// Now let us generate the sql
while(list($key,$val)=each($kt)){
if($val<>" " and strlen($val) > 0){$query .= " lab_section like '%$val%' or name like '%$val%' or species like '%$val%' or ";}
}
$query=substr($query,0,(strLen($query)-3));
// this will remove the last or from the string.
} // end of if else based on type value
$query.=" and ";
}// end of if area , if search_text value is entered
$query=substr($query,0,(strLen($query)-4));
echo "<div class='search-separator'></div>";
// Display records ////
foreach ($dbo->query($query) as $t) {
echo "$t[name],$t[lab_section],$t[price],$t[species]"; }
}
?>
但是MYSQL的行几乎是重复的。但他们都有独特的名字。所以我需要按名称删除重复的结果。换句话说,我只想按其唯一名称列出结果。如何通过其唯一名称删除重复结果?
我以为我可以做到,例如:
select DISTINCT ......
from mytable
group by name
但我不知道在上面的代码中把它放在哪里......
答案 0 :(得分:1)
在行中输入您的DISTINCT
$query="select * from mytable where ";
GROUP你可以在行后使用
$query=substr($query,0,(strLen($query)-4));
但一般来说,代码并不好。 不要在查询中使用直接从用户传递的值($ _GET,$ _ POST等)。至少使用sprintf(),但最好使用占位符。
为什么你不能取代这两行:
$ SEARCH_TEXT = LTRIM($ SEARCH_TEXT);
$ SEARCH_TEXT = RTRIM($ SEARCH_TEXT);
与$search_text=trim($search_text);
你不需要行$query=substr($query,0,(strLen($query)-4));
你可以将所有这些查询部分写入数组,然后进行内爆(&#39; AND&#39;,$ conditions);就在&#34;而#34;