【问题标题】:MySQL query to search a record in complete databaseMySQL查询以在完整数据库中搜索记录
【发布时间】:2014-05-12 20:56:49
【问题描述】:

我正在搜索 SQL 查询以通过 PhpMyAdmin 运行以查找包含给定字符串的数据库的所有表中的所有记录。 到目前为止,我发现的只是一个查询:

SELECT * FROM information_schema.`COLUMNS` C WHERE TABLE_SCHEMA = 'final_year_project_demo'

返回架构中的所有表,但我在 SQL 中效率不高,因此无法进一步移动。

我需要的只是一个查询,它将列出通过上述代码列出的所有表中的所有记录(在任何列中包含特定字符串)。 所有表中的列都相同。

【问题讨论】:

  • 请查看stackoverflow.com/questions/23616695/… 中的方法。您必须对您感兴趣的所有表的所有列执行此操作。为什么要这样做?
  • 我正在用相同类型但名称不同的表来扩充我的数据库。因此,搜索的复杂性。

标签: mysql sql phpmyadmin


【解决方案1】:

这是一件有点复杂的事情。而且你真的不能一步到位。我会给你一些开始的东西,你必须从那里拿走它:

select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME="user_id";

现在这将产生如下输出:

+--------------------------------------------------------------------+
| CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;")          |
+--------------------------------------------------------------------+
| SELECT * FROM table0 WHERE user_id=1;                              |
| SELECT * FROM table1 WHERE user_id=1;                              |

现在,你想转身并执行所有这些命令......所以这样做:

select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME="user_id" INTO OUTFILE "some_file_path_and_name";

这将为您提供一个包含您正在查找的所有命令的文本文件。

更新---

我错过了“对于任何列位..”

select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE ", COLUMN_NAME, "='WHATEVER';") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLLATION_NAME IS NOT NULL INTO OUTFILE 'somepath';

在这里,我们使用的是您说要查找字符串的事实,并且所有字符串类型字段都有一个 collat​​ion_name。将 WHATEVER 替换为您要查找的内容。

【讨论】:

  • 如果听起来很傻,请原谅,但是 user_id=1 在这里推断出什么?因为当我直接执行它时,它给了我一个空集
  • 您在数据库中寻找的是什么。你刚刚说的是“给定的字符串”。您可以在我的示例中将“user_id”替换为任何字段名称(只要确保在我的查询中的两个位置都替换它)。并将“=1”替换为您要查找的字段相等。
  • 哦,等等。我错过了您所说的“在任何专栏中”。让我给你一个更好的答案。
  • 您提供的代码正在运行,但是当我复制并执行这些命令时,它会显示“未选择数据库”......只是为了确保这些命令将返回包含其中一个字符串的记录它的列对吗??
猜你喜欢
  • 2012-03-10
  • 2016-07-19
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 2012-04-01
  • 1970-01-01
相关资源
最近更新 更多