有什么方法可以获取我在查询中使用的表?在查询中获取mysql表
我用第一种方法是使用正则表达式:
// result[1] = "SELECT"
// result[3] = "All between FROM and WHERE, ex: `users`, ex: `users`, `test`
if($result[1] == "SELECT" && !preg_match('/FROM\s*(.*?,.*?)\s*WHERE/i', $query, $res))
{
$tables = preg_replace('/`|\'|\s/i', '', $result[3]); // strip ` or ' or spaces
$tables = explode(",", $tables);
sort($tables);
}
但也有复杂的MySQL查询,所以我用下一个方法是:
EXPLAIN SELECT...
,并从表结果数组。
问题带有计数,我知道,在MyISAM数据DB的行数存储,所以如果你做一个查询:
SELECT COUNT(*) FROM users
你没有得到所使用的表在查询中,你会得到“选择表优化”,因为使用任何表。
那么,还有另一种方法来获得表中使用的查询?
有关连接的查询呢?您还需要扫描这些以获取连接的表名称。对于外键,如果更新/删除级联,也可以隐式地涉及其他表。怎么看?那些可以在后台涉及多个表格,但是将它们表现为单个“表格”。然后触发器......这是一个大蜡球 – 2010-08-04 04:49:15
@Marc乙:我使用的最终解决方案是搜索查询内的所有表。缓存结果,最佳性能。 – Wiliam 2010-08-04 14:06:51