Echo DISTINCT 行以从 MYSQL 中删除重复结果
Echo DISTINCT row to remove duplicate results from MYSQL
我有以下代码,效果很好:
///////////////////////
$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
但我不知道在我上面的代码中把它放在哪里....
在行中输入您的 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));
例如,你可以将所有这些查询部分写入数组,然后 make implode(' AND ',$conditions); "while"
之后
我有以下代码,效果很好:
///////////////////////
$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
但我不知道在我上面的代码中把它放在哪里....
在行中输入您的 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));
例如,你可以将所有这些查询部分写入数组,然后 make implode(' AND ',$conditions); "while"