循环浏览表名以搜索数据


Loop through table names to search for data

我试图在表中搜索可能包含在表列表中的条目。

例如,我有三个表,分别命名为table1、table2和table3。每个表都包含相同的字段:id、name、vehicle。只要说我想在其中两个表中找到一个存在的名称,我该怎么做?表的数量是动态的,但我已经可以通过查询获得它们了。

获取表名的代码

$retrievequery = "SELECT table_name 
                  FROM information_schema.tables  
                  WHERE table_schema = 'bargebooking' 
                  AND table_name NOT LIKE 'slots%'  
                  AND table_name NOT LIKE 'accounts%';";
$result = mysqli_query($conn,$retrievequery);
$count = mysqli_num_rows($result);
while($data = mysqli_fetch_array($result))
{
    $row[] = $data[0];
}

此代码将表名存储到数组中

在表格中搜索名称的代码

for($i=0;$i<count($row);$i++)
{
    $curr_table = $row[$i];
    $searchquery = "SELECT * FROM `$curr_table` where name='second'";
    $result = mysqli_query($conn,$searchquery);
    while($row = mysqli_fetch_array($result))
    {
        echo $row['id'];
    }
}

这是我的尝试。到目前为止,如果我删除where子句,它将打印出所有id,但只打印出一个表(第一个表)。

如果您不理解,我想找到可能存在于多个表中的数据,并将其列出。我希望我能在这方面得到一些帮助。

您可以使用2个子查询来判断列的值是否在其他2个表中。

SELECT *
FROM `table1`
WHERE `column_t1` IN (
    SELECT `column_t2`
    FROM `table2`
) AND IN (
    SELECT `column_t3`
    FROM `table3`
)
while($row = mysqli_fetch_array($result))

此语句覆盖您正在循环的$row变量

由于所有三个表都有相同的定义,我会在SQL中将所有表联合在一起,并为每个表分配一个表id。然后将我的搜索应用于结果。

应该很容易从表定义中动态构建字符串。如果有帮助的话,使用这种方法还会告诉你它是在哪个表中找到的。

SELECT  *
FROM    (   SELECT 1 as tid, * FROM table1
            UNION ALL
            SELECT 2 as tid, * FROM table2
            UNION ALL
            SELECT 3 as tid, * FROM table3
        )   A
WHERE   keyField = @searchCriterial

任何问题都可以随意询问。总是乐于助人。

我认为您必须更改第二个查询结果的$row名称:

for($i=0;$i<count($row);$i++)
{
$curr_table = $row[$i];
$searchquery = "SELECT * FROM `$curr_table` where name='second'";
$name_result = mysqli_query($conn,$searchquery);
while($name_row = mysqli_fetch_array($name_result))
{
    echo $name_row['id'];
}
}