gpt4 book ai didi

mysql - Like 查询中的规范

转载 作者:行者123 更新时间:2023-11-29 08:43:27 26 4
gpt4 key购买 nike

我无法弄清楚这个查询出了什么问题。我只想搜索特定类型,但此查询给出了其他类型的结果。真的很需要一些帮助。此代码适用于我用 php 构建的第一个网站。

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

最佳答案

首先,我建议阅读 MySQL 中的模式匹配。文档链接为:http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html

SQL 模式匹配使您可以使用“_”来匹配任何单个字符,使用“%”来匹配任意数量的字符(包括零个字符)。在 MySQL 中,SQL 模式默认不区分大小写。这里显示了一些示例。使用 SQL 模式时不要使用 = 或 <>;请改用 LIKE 或 NOT LIKE 比较运算符。

示例

查找以“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 |
+----------+-------+---------+------+------------+------------+

要查找恰好包含五个字符的名称,请使用“_”模式字符的五个实例:

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 |
+-------+--------+---------+------+------------+-------+

您修改后的查询

因此,您希望查询从 NEWS 表中选择行,并选择 TITLE 类似于关键字且 GENRE 等于特定字符串的所有内容。

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

最初,您使用的是:

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
}
}
}
}

关于mysql - Like 查询中的规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com