Mysql - 帮助我更改此查询以在搜索中应用 AND 逻辑而不是 OR ?

2023-12-26

首先执行这些表和数据转储:-

CREATE TABLE IF NOT EXISTS `Tags` (
`id_tag` int(10) unsigned NOT NULL auto_increment,
`tag` varchar(255) default NULL,
PRIMARY KEY (`id_tag`),
UNIQUE KEY `tag` (`tag`),
KEY `id_tag` (`id_tag`),
KEY `tag_2` (`tag`),
KEY `tag_3` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;


INSERT INTO `Tags` (`id_tag`, `tag`) VALUES
(1, 'key1'),
(2, 'key2');

CREATE TABLE IF NOT EXISTS `Tutors_Tag_Relations` (
`id_tag` int(10) unsigned NOT NULL default '0',
`id_tutor` int(10) default NULL,
KEY `Tutors_Tag_Relations` (`id_tag`),
KEY `id_tutor` (`id_tutor`),
KEY `id_tag` (`id_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `Tutors_Tag_Relations` (`id_tag`, `id_tutor`) VALUES
(1, 1),
(2, 1);

以下查询从 Tutors_Tag_Relations 表中查找至少引用术语“key1”或“key2”之一的所有导师。

SELECT td . *
FROM Tutors_Tag_Relations AS td
INNER JOIN Tags AS t ON t.id_tag = td.id_tag
WHERE t.tag LIKE "%key1%"
OR t.tag LIKE "%key2%"

Group by td.id_tutor
LIMIT 10

请帮助我修改此查询,以便它返回 Tutors_Tag_Relations 表中引用术语“key1”和“key2”(AND 逻辑而不是 OR 逻辑)的所有导师。请建议考虑大量数据记录的优化查询(该查询不应单独获取与每个关键字匹配的两组导师,然后找到交集)。

Update

将问题提升到一个新的水平。请运行以下新查询:-

=================================================== ===================================

如果不存在则创建表learning_packs_tag_relations ( id_tagint(10) 无符号非空默认“0”,id_tutorint(10) 默认为空,id_lpint(10) 无符号默认为 NULL, 钥匙Learning_Packs_Tag_Relations_FKIndex1 (id_tag), 钥匙id_lp (id_lp), 钥匙id_tag (id_tag) ) 引擎=InnoDB 默认字符集=latin1;

如果不存在则创建表learning_packs ( id_lpint(10) 无符号非空自动增量,id_statusint(10) 无符号非空默认“2”,id_authorint(10) 无符号非空默认“0”,namevarchar(255) NOT NULL 默认 '', 首要的关键 (id_lp) ) 引擎=InnoDB 默认字符集=utf8 AUTO_INCRMENT=21 ;

如果不存在则创建表tutors_tag_relations ( id_tagint(10) 无符号非空默认“0”,id_tutorint(10) 默认为空,

KEY Tutors_Tag_Relations (id_tag), 钥匙id_tutor (id_tutor), 钥匙id_tag (id_tag) ) 引擎=InnoDB 默认字符集=latin1;

如果不存在则创建表users ( id_userint(10) 无符号非空自动增量,namevarchar(100) NOT NULL 默认 '',surnamevarchar(155) NOT NULL 默认 '',

首要的关键 (id_user)

) 引擎=InnoDB 默认字符集=utf8 AUTO_INCRMENT=52 ;

如果不存在则创建表tutor_details ( id_tutorint(10) 非空自动增量,id_userint(10) 不为空, 首要的关键 (id_tutor) ) 引擎=InnoDB 默认字符集=latin1 AUTO_INCRMENT=60 ;

如果不存在则创建表tags ( id_tagint(10) 无符号非空自动增量,tagvarchar(255) 默认为空, 首要的关键 (id_tag), 独特的钥匙tag (tag) ) 引擎=InnoDB 默认字符集=latin1 AUTO_INCRMENT=5 ;

修改表learning_packs_tag_relations添加约束Learning_Packs_Tag_Relations_ibfk_1外键(id_tag) 参考tags (id_tag) 删除时不执行任何操作,更新时不执行任何操作;

修改表learning_packs

添加约束Learning_Packs_ibfk_2外键(id_author) 参考users (id_user) 删除时不执行任何操作,更新时不执行任何操作;

修改表tutors_tag_relations添加约束Tutors_Tag_Relations_ibfk_1外键(id_tag) 参考tags (id_tag) 删除时不执行任何操作,更新时不执行任何操作;

插入test.users ( id_user , name , surname) 值( NULL,“维维安”,“理查兹” ), ( NULL 、“萨钦”、“坦杜卡” );

插入test.users ( id_user , name , surname) 值( NULL 、“唐”、“布拉德曼” );

插入test.tutor_details ( id_tutor , id_user) 值( 空,'52' ), ( 空,'53' );

插入test.tutor_details ( id_tutor , id_user) 值( 空,'54' );

插入test.tags ( id_tag , tag) 值( 1、《维维安》 ), ( 2、“理查兹” );

插入test.tags (id_tag, tag) VALUES (3, 'Sachin'), (4, 'Tendulkar'); 插入test.tags (id_tag, tag) VALUES (5, '唐'), (6, '布拉德曼');

插入test.learning_packs (id_lp, id_status, id_author, name) VALUES ('1', '1', '52', '板球 1'), ('2', '2', '52', '板球 2');

插入test.tags (id_tag, tag) VALUES ('7', '板球'), ('8', '1'); 插入test.tags (id_tag, tag)值('9','2');

插入test.learning_packs_tag_relations (id_tag, id_tutor, id_lp)值('7','52','1'),('8','52','1'); 插入test.learning_packs_tag_relations (id_tag, id_tutor, id_lp) 值 ('7', '52', '2'), ('9', '52', '2');

=================================================== ===================================

关于新系统—— - 系统现在多了 4 个表 - 导师、用户(链接到tutor_details)、learning_packs、learning_packs_tag_relations - 教师创建包 - 存储在tutorials_tag_relations中的教师的标签关系以及存储在learning_packs_tag_relations中的包的标签关系。

现在我想用相同的AND逻辑搜索learning_packs。帮助我修改以下查询,以便搜索包名称或导师的姓名、姓氏结果所有活动包(直接是那些包或由这些导师创建的包)。

=================================================== ==================================

选择 lp.*

来自 Learning_Packs AS lp

LEFT JOIN Learning_Packs_Tag_Relations AS lptagrels ON lp.id_lp = lptagrels.id_lp

LEFT JOIN Tutors_Tag_Relations as ttagrels ON lp.id_author = ttagrels.id_tutor 左连接 Tutor_Details AS td ON ttagrels.id_tutor = td.id_tutor LEFT JOIN 用户作为 u on td.id_user = u.id_user

JOIN 标签为 (t.id_tag = lptagrels.id_tag) 或 (t.id_tag = ttagrels.id_tag)

其中 lp.id_status = 1 AND ( t.tag LIKE "%Vivian%" OR t.tag LIKE "%Richards%" )

按 lp.id_lp 分组 HAVING count(lp.id_lp) > 1 limit 0,20

如您所见,搜索“Cricket 1”会返回该包,但搜索 Vivian Richards 不会返回相同的包。

请帮忙


如果使用 Group 和having 就非常简单了。这应该得到你正在寻找的东西。

选择 id_tutor 来自 Tutors_Tag_Relations AS td INNER JOIN 标签 AS t ON t.id_tag = td.id_tag WHERE t.tag LIKE“%key1%” 或 t.tag LIKE "%key2%" 按 id_tutor 分组 计数(id_tutor)>1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql - 帮助我更改此查询以在搜索中应用 AND 逻辑而不是 OR ? 的相关文章

  • JDBC 错误:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我在 Java Eclipse 中收到错误消息 我在 MySql 中有一个数据库 它有列 String user name int id time int id desk int user password 我想
  • 如何删除 MySQL 数据库?

    你可能从我的上一个问题中注意到一个问题引发了更多的问题 在 MySQL 监视器中阅读 MySQL 手册 https stackoverflow com questions 1081399 我的数据库现在无法使用 部分原因是我想破坏东西并且无
  • MySQL - 从数字列表中选择在表的 id 字段中没有对应项的数字

    我有一个数字列表 例如 2 4 5 6 7 我有一个表 foos 带有 foos ID 包括 1 2 3 4 8 9 我想获取我的号码列表 并在我的表的 ID 字段中找到那些没有对应项的号码 实现此目的的一种方法是创建一个表格栏 在 ID
  • Dapper 或 MySql 未找到包含句号“.”的存储过程。

    我有一个简单的 C 控制台 它使用 Dapper ORM 调用本地 MySql 数据库 以执行名为的存储过程users UserCreate 但是 当运行查询时 我收到一个异常 在数据库 用户 中找不到过程或函数 UserCreate Bu
  • Mysql带限制的删除语句

    我试图从表中删除行 但出现错误 DELETE FROM chat messages ORDER BY timestamp DESC LIMIT 20 50 我在 50 时收到此错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版
  • MySQL 概念:会话与连接

    我对 MySQL 的概念有点困惑 会话与连接 当谈论连接到 MySQL 时 我们使用连接术语 连接池等 然而在 MySQL 在线文档中 http dev mysql com doc refman 4 1 en server system v
  • MySQL中查找id最大的行

    看一下下面名为 Articles 的 MySQL 表 id articleId version title content 1 1 0 0 ArticleNo 1 title v0 0 ArticleNo 1 content v0 0 2
  • MySQL NOT IN 来自同一个表中的另一列

    我想运行 mysql 查询来选择表中的所有行films其中的值title该列不存在于另一列的所有值中的任何位置 collection 这是我的表格的简化版本 其中包含内容 mysql gt select from films id titl
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni
  • mysql GROUP_CONCAT 重复项

    我从 farmTOanimal 表中进行连接 如下所示 有一个类似的farmTotool表 id FarmID animal 1 1 cat 2 1 dog 当我在视图中加入表时 我得到的结果如下所示 FarmID animal tool
  • 如何将数据源url查询参数添加为application.properties?

    是否可以添加数据源 url 参数作为额外属性 或者我总是必须将它们作为查询参数直接附加到 url 中 Example spring datasource url jdbc mysql localhost test useSSL false
  • XP及PHP MYSQL 练级系统

    我已经查看了所有提出的问题和答案 但我似乎找不到最适合我的答案 我想做的是开发一个系统 当用户达到一定的 XP 限制时 系统会进入下一个级别 它显示了下一个 XP 之前需要多少 XP So lvl1 0 gt lvl2 256 gt lvl
  • 在 BIRT 中输入参数后更新数据集查询

    在 BIRT 报告设计中传递参数后 如何更改或更新数据集的查询 详细说明 我有一个如下所示的查询 WHERE 该参数标记可以保存不同的值 在用户输入参数后 它看起来像这样 例如 WHERE column name 1 or WHERE co
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • 连接 3 三张表

    我有这个图表应该可以解释我的情况 我需要一些关于连接 3 个表的帮助 我不知道如何做这种事情 因此 我可以通过执行以下操作来经历一段检索记录的 while 循环 img src alt Album AlbumID 使用内部联接 http w
  • Innodb页面大小设置

    在innodb中 页面大小默认为16kb 如何将页面大小设置为 8kb 是否有在源编译步骤中设置的选项 您不需要在源编译步骤中指定页面大小 MySQL 5 6 及更高版本支持不同的页面大小 无需重新编译 但是 您必须在初始化 InnoDB
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • mod_rewrite, .htaccess 连接mysql数据库

    我希望 htaccess 文件中的 mod rewrite 链接到 mysql 数据库以向我提供映射信息 具体来说 我使用单个代码库来托管多个站点 因此 如果用户请求图像 例如 http www example com images car

随机推荐