我在MySql中有一个包含多个表的数据库,我试图弄清楚如何基本搜索一个条目并返回包含该条目的所有表。我不需要整个桌子,只需要TABLE_NAME。
目前我在index.php中有这个:
$query = mysql_query("SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='maps'") or die(mysql_error());
然后我想创建另一个页面,显示我所描述的表格。 希望你理解我的意思。
EDIT。 哦,所以我想出了这个代码。 我有点做我想要的,但现在我想搜索表中的每一行,而不是表名。
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='maps' AND TABLE_NAME LIKE "%Search term%"
EDIT2。
现在在我的.php文件中,我有以下内容。 '一个'进行测试。
$qu = "set @@group_concat_max_len = 1000000;
set @schema := 'maps';
set @search := '%a%';
set @sql = (
select group_concat(concat(
'select distinct \'', c.TABLE_NAME, '\' as table_name, ',
'\'', c.COLUMN_NAME, '\' as column_name ',
'from `', @schema, '`.`', c.TABLE_NAME,
'` where `', c.COLUMN_NAME, '` like \'', @search , '\''
) separator ' union all ')
from information_schema.`COLUMNS` c
where c.TABLE_SCHEMA = @schema
);
prepare stmt from @sql;
execute stmt;"
$query = mysql_query($qu) or die(mysql_error());
和
<?php
while($row = mysql_fetch_array($query))
{
$f1 = $row['TABLE_NAME'];
$f2 = $row['TABLE_NAME'];
?>
<tr>
<td><a href="#"><?php echo $f1 ?></a></td>
<td><?php echo $f2 ?></td>
</tr>
如果你能提供帮助意味着很多,你已经解决了它,但我对此很新,所以我不确定如何实现它,对不起。
答案 0 :(得分:1)
您可以动态构建预准备语句。
set @@group_concat_max_len = 1000000;
set @schema := 'maps';
set @search := '%Search term%';
set @sql = (
select group_concat(concat(
'select distinct \'', c.TABLE_NAME, '\' as table_name, ',
'\'', c.COLUMN_NAME, '\' as column_name ',
'from `', @schema, '`.`', c.TABLE_NAME,
'` where `', c.COLUMN_NAME, '` like \'', @search , '\''
) separator ' union all ')
from information_schema.`COLUMNS` c
where c.TABLE_SCHEMA = @schema
);
prepare stmt from @sql;
execute stmt;
构建的语句将搜索&#39;%搜索词%&#39;在每个表的每一列中,为包含搜索字词的每列返回table_name
和column_name
。
您还可以使用PHP构建相同的查询:
$schema = 'maps';
$search = '%Search term%';
$query1 = "
select TABLE_NAME, COLUMN_NAME
from information_schema.`COLUMNS`
where c.TABLE_SCHEMA = {$schema}
";
$result1 mysql_query($query1);
$queryParts = array();
while($row = mysql_fetch_assoc($result1)) {
$table = $row['TABLE_NAME'];
$column = $row['COLUMN_NAME'];
$queryPart = "
select distinct '{$table}' as table_name, '{$column}' as column_name
from `{$schema}`.`{$table}`
where `{$column}` like '{$search}'
";
$queryParts[] = $queryPart;
}
$unionQuery = implode(' union all ', $queryParts);
$result2 = mysql_query($unionQuery);
while($row = mysql_fetch_assoc($result2)) {
echo $row['table_name'] . '.' . $row['column_name'] . '<br>';
}
注意:创建的查询可能非常慢。