Mysql like查询中的规范

Mysql like查询中的规范,mysql,sql,where,sql-like,Mysql,Sql,Where,Sql Like,我不知道这个问题出了什么问题。我只想搜索一个特定的流派,但这个查询会给我其他流派的结果。我真的需要一些帮助。这段代码是为我的第一个用php构建的站点编写的 SELECT * FROM news WHERE (titel LIKE '%keyword%') AND genre='politics' 首先,我建议阅读MySQL中的模式匹配。文档链接是: SQL模式匹配使您能够使用“\”匹配任何单个字符,使用“%”匹配任意数量的字符(包括零个字符)。在MySQL中,默认情况下SQL模式不区分大小写

我不知道这个问题出了什么问题。我只想搜索一个特定的流派,但这个查询会给我其他流派的结果。我真的需要一些帮助。这段代码是为我的第一个用php构建的站点编写的

SELECT * 
FROM news
WHERE (titel LIKE '%keyword%') AND genre='politics'

首先,我建议阅读MySQL中的模式匹配。文档链接是:

SQL模式匹配使您能够使用“\”匹配任何单个字符,使用“%”匹配任意数量的字符(包括零个字符)。在MySQL中,默认情况下SQL模式不区分大小写。这里显示了一些示例。当您使用SQL模式时,不使用=或;请改用“相似”或“不相似”比较运算符

示例

要查找以“b”开头的名称,请执行以下操作:

mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
要查找以“fy”结尾的名称,请执行以下操作:

mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+
要查找包含“w”的名称,请执行以下操作:

mysql> SELECT * FROM pet WHERE name LIKE '%w%';
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+
要查找正好包含五个字符的名称,请使用五个“\u1”模式字符的实例:

mysql> SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+
您修改的查询

因此,您希望查询从新闻表中选择行,并选择标题类似于关键字且类型等于特定字符串的所有内容

以下是我将如何构造您的查询。此查询中不考虑性能因素,但如果这是一个大表上的频繁查询,则可能需要研究索引和其他性能增强因素

最初,您使用的是:

SELECT * FROM news WHERE (title LIKE '%keyword%') AND genre='politics'
备选案文1:

SELECT *
FROM news
WHERE
title LIKE '%keyword%'
AND
genre = 'politics';
备选案文2:

在将字段插入查询之前,您应该考虑输入来自何处,以及是否需要对字段进行参数化。使用参数可以产生更干净、更灵活的代码,并提供安全性和类型检查

试试这样的。这是一段未经测试的代码,因此可能存在一些语法问题,但应该很接近

private string title = "%title%";
private string genre = "genre";

using (MySqlConnection con = new MySqlConnection(connectionString))
{
  using (MySqlCommand cmd = new MySqlCommand())
  {
    cmd.Connection = con;
    cmd.CommandText 
      = "SELECT * FROM NEWS WHERE TITLE LIKE '@title' AND GENRE = @genre; ";
    cmd.Parameters.AddWithValue("@title", title);
    cmd.Parameters.AddWithValue("@genre", genre);
    using (MySqlDataReader drd = cmd.ExecuteReader())
    {
      while (drd.Read())
      {
        // Read from data reader
      }
    }
  }
}

您确定它应该是
titel
而不是
title
?:)“整个数据库中的查询搜索”是什么意思?查询解释在这里会很有帮助。您在哪里运行此查询,在其他应用程序中还是使用sql management studio。你的问题是,结果也给出了其他类型的结果。对吗?Nemoden,Titel是瑞典语中的头衔。只是忘了翻译。二极管,你说对了。结果给出了其他类型的结果。如果
类型
不是
'politics'
'politics'
'politics'
'politics'
等,则此查询无法给出结果。您能给我们返回的一行与此冲突吗?