【问题标题】:CodeIgniter SQL Query to include apostrophes and search every column in a specific orderCodeIgniter SQL Query 包含撇号并按特定顺序搜索每一列
【发布时间】:2013-07-07 21:58:51
【问题描述】:

首先,我不是程序员,我在尝试自己完成的项目上向 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 查询,但是对于我阅读的内容的偏移和限制应该不难。

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:

    您可能没有注意到,但是您的查询中有一个错误 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,您可以使用多个列对结果集进行排序,例如

    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}%' OR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      相关资源
      最近更新 更多