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

标签 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 查询,但是从我阅读的内容来看,这应该不难,因为有偏移量和限制。

最佳答案

你可能没有注意到你的查询有错误 year 是你的列名,mysql 也有一个函数 year 所以它会产生你的错误如果您不确定它是否会与任何函数名称冲突,请将列名与反引号“`”放在一起,最佳做法是在所有列上添加反引号,这样就不会发生冲突,因此它看起来像这样

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 结果集,您可以使用多个列来排序

按 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'

注意

If you are not adding the back ticks on the column names then make sure they are unique and also put a space between the operators, functions etc and the column names like LIKE '%{$keyword}%'OR should be with space LIKE '%{$keyword}%' OR

关于php - CodeIgniter SQL 查询包含撇号并按特定顺序搜索每一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17562730/

相关文章:

sql - 如何使用计算列的 sql 函数从 XML 中检索值

php - 使用php在服务器之间传输文件

php - 有效地复制/复制/备份数据库表 - mysql

mysql - 为什么 EXPLAIN 的输出在每个 SHOW 索引后都会改变?

php - FullCalendar 和 MySQL -- 优化我的查询

PHP - 显示表中最后 3 行 SQL 行(不起作用)

php - 如何在一个表中查找不在其他表中的行

php - 当参数包含 : or\时,url 后的参数未传递给被调用函数

php - php中查询sql的语法

javascript - 选择 html 更改其他 从 onchange 函数中选择 html