mysql - 用于匹配子查询的 SQL 查询

标签 mysql sql mariadb

我正在创建一个类似 Stack Overflow 的网站。
当我们在“stack-overflow”上发布新问题时,我们会给出一些与我们的问题相关的标签。

我在表 question 中有一个名为 q_lated_tag_ids(问题相关标签 ID)的字段。

我使用此字段来存储与已发布问题相关的所有以逗号(,)分隔的tag_ids

表格问题>>

q_id | q_title | q_ralated_tag_ids
1    | title1  | 4,5,8
2    | title2  | 6,8,1
3    | title3  | 2,81,13
4    | title4  | 8
3    | title3  | 2,87
4    | title4  | 83

表格答案>>

t_id | t_name | t_description
1    | java   | java is ...
2    | php    | php is ...
3    | ajax   | ajax is ...
4    | c++    | c++ is ...
5    | perl   | perl is ...
8    | java8  | java8 is...
...

现在的问题是>> 我想获取/选择与 tag-id = 8 相关或与 java8 标签

相关的所有问题详细信息

为此,我创建了一个查询>>

select * from question where (
                  q_related_tag_ids like '8' 
                  or q_related_tag_ids like '%,8,%'
                  or q_related_tag_ids like '%,8')

有没有人有更好的方法?

最佳答案

我将创建一个表来建立两个表之间的关系。

表格问题>>

q_id | q_title
1    | title1
2    | title2
3    | title3
4    | title4
3    | title3
4    | title4

表格答案>>

t_id | t_name | t_description
1    | java   | java is ...
2    | php    | php is ...
3    | ajax   | ajax is ...
4    | c++    | c++ is ...
5    | perl   | perl is ...
8    | java8  | java8 is...

表关系>>

t_id | q_id
4    | 1
5    | 1
8    | 1
6    | 2
8    | 2
1    | 2

关系表的主键是使用两个外键之间的串联创建的,并且是唯一的

从问题 WHERE q_id IN 中选择 *(从关系中选择 q_id WHERE t_id = 8)

我建议你看看Merise方法

关于mysql - 用于匹配子查询的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921120/

相关文章:

mysql - 使用 Mysql JOIN 进行 DISTINCT SUM

php - MySQL PHP PDO 准备语句 - 性能问题与安全性

mysql - 根据条件语句MYSQL昨天的价格在另一列中创建值

mysql - 以三个字母和四个数字开头的正则表达式

sql - SQLite-COALESCE中断结果顺序

php - 如何在 WAMP 中用 MariaDb 替换 MySql?

PHP MySQL (MariaDB) 查询中断

mysql - 如何使用 Laravel 查询生成器从计数中排除数字?

sql - 在数据仓库中使用 View

mysql - 使用 ndoutils-2.0.0 将数据从 Nagios 存储到 MariaDB