繁体   English   中英

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

[英]CodeIgniter SQL Query to include apostrophes and search every column in a specific order

首先,我不是程序员,而是尝试从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查询,但这对我所读内容的偏移和限制并不难。

您可能没有注意到,但是查询年份有一个错误,因为您的列名是mysql,而mysql也有一个函数年份,因此如果您不确定列名带有反斜线“`”,它将产生错误。会与任何函数名冲突,最佳做法是在所有列上添加反斜杠,这样就不会有冲突的机会,因此看起来像这样

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}%'OR)应使用空格LIKE' %{$ keyword}%'或

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM