Echo DISTINCT行从MYSQL中删除重复结果

时间:2015-02-25 00:30:08

标签: php mysql group-by duplicates

我有以下代码,效果很好:

///////////////////////
$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

但我不知道在上面的代码中把它放在哪里......

1 个答案:

答案 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;

之后