mysql - 如果数字不在另一个表的逗号分隔列表中,是否可以将行插入到表中?

标签 mysql sql database

因此,我目前正在进行 2 个数据库调用,以基本上从一个表(ma​​rks_nums_options)中选择一个值,如果某个值不在该表中的逗号分隔列表(基本上是排除列表)中,然后将一个条目添加到我的主数据库表中(ma​​rk_nums)

我现在在做什么

我当前添加数据库条目的 SQL 代码:

SELECT excludetid FROM mark_nums_options WHERE userid = '$userid' LIMIT 1

excludetid 是一个逗号分隔的列表,如下所示:33,887,1,774

然后,我使用 PHP 来确保我的 $object 不在 $excludetid 数组中,方法是首先将 $excludetid 逗号列表更改为 PHP 数组,并检查该值是否在数组中

!in_array($object,$excludetid)

如果它不在那里,那么我将一组值插入到我的主 ma​​rks_nums 表中

INSERT INTO marks_nums (userid, date, type, object, objecttitle, link, pid, tid)          
VALUES ('$userid', '$dateline', '$type', '$object', '$objecttitle', '$link', '$pid', '$tid')

我希望做什么

我希望基本上将所有这些都放入一个数据库查询中,因此插入调用检查以查看 $object 是否是逗号分隔列表 $excludetid 内的数字,但问题是 $excludetid 在另一个中表名为marks_nums_options。

这可能吗?值得这样做吗?我希望通过将其全部合并为 1,我会减少对数据库的访问,从而提高性能

谢谢!

最佳答案

I was hoping by combining it all into 1 I would be hitting the database less and therefore have a performance improvement

与在逗号分隔列表中搜索特定值所导致的表扫描的更大成本相比,查询数据库两次只是微不足道的额外性能成本。

您无法运行有效的查询来搜索逗号分隔列表中的值,因为您无法为此类搜索建立索引。它必须以困难的方式进行搜索,搜索表中的每一行。

如果您将排除的 tid 值列表存储在单独的表中(每行一个值),这将是一个更简单的查询,并且具有更好的性能。

不要因小失大。

关于mysql - 如果数字不在另一个表的逗号分隔列表中,是否可以将行插入到表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48675878/

相关文章:

sql - 更好的连接查询

Android [IllegalArgumentException : the bind value at index 1 is null] for no apparent reason

mysql - SQL - 选择不同的行并将它们与另一个表连接以获取数据

mysql - 从文本文件填充 MySQL 表

mysql - 在mysql中实现增量搜索

mysql - 如何收集发送到mysql的查询?

mysqldump 不工作 - 错误 1300 无效的 utf8 字符串

MySQL 对分组记录进行排序

mysql - 将更新行 ID 设置为 MySQL 中的 OUT 参数

objective-c - 获取 FMDB 更新查询中受影响的行数