CodeIgniter SQL Query包含撇号并按特定顺序搜索每一列

时间:2013-07-10 05:01:50

标签: php mysql sql codeigniter

首先,我不是程序员,而是试图向Google学习我一直想为自己完成的项目。

使用的技术:CodeIgniter 2.1.2,PHP 5.3,MySQL

我的网页上有一个搜索关键字框,我希望这样做是搜索整个表格,但按特定顺序显示结果。

我目前有这个SQL查询,它不能用于撇号,也不按列排序。

function search($keyword)
 {
  $query="SELECT *
  FROM HWC
  WHERE ModelName LIKE '%{$keyword}%' OR Toy LIKE '%{$keyword}%'OR Year LIKE '%{$keyword}%'
  OR Col LIKE '%{$keyword}%'OR Series LIKE '%{$keyword}%'OR Color LIKE '%{$keyword}%'
  OR Tampo LIKE '%{$keyword}%'OR BaseColor LIKE '%{$keyword}%'OR BaseType LIKE '%{$keyword}%'
  OR WindowColor LIKE '%{$keyword}%'OR InteriorColor LIKE '%{$keyword}%'OR WheelType LIKE '%{$keyword}%'
  OR Country LIKE '%{$keyword}%'OR 'Series#' LIKE '%{$keyword}%'OR Notes LIKE '%{$keyword}%'";

  $result=$this->db->query($query);
  $result=$result->result_array();

  return $result;
}

我知道这是错的,让一些事情发挥作用是暂时的。

老实说,我可以把它分成3个类别进行排序

ModelName
Toy
Other (All the rest)

我也喜欢我为支持分页而构建的SQL查询,但是对于我所读取的偏移和限制不应该很难。

1 个答案:

答案 0 :(得分:3)

您可能没有注意到但查询中有错误是您的列名,而mysql也有功能,因此会产生您的错误如果您不确定它是否会与任何函数名称冲突,请将列名称与后面的勾号“`”放在一起,最佳做法是在所有列上添加后面的刻度,这样就不会有冲突,所以它看起来像这样< / p>

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '

对于order by结果集,您可以使用多个列来排序,例如

ORDER BY col1,col2,col3

对于结果的分页,你使用mysql的LIMIT函数和起始索引和结束索引,如

LIMIT 0 , 10或前10个结果只是您可以指定LIMIT 10保留在我的默认情况下将在查询结束时应用限制它将按升序排序结果集但您可以指定如果您希望按降序DESC进行结果设置,则为订单。

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '
ORDER BY `ModelName`, `Toy` LIMIT 0,10'

注意

  

如果你没有在列名称上添加后面的刻度,那么确保它们是唯一的,并且在运算符,函数等和列名之间放置一个空格    LIKE'%{$ keyword}%'或应为空格 LIKE'%{$ keyword}%'或