循环遍历表名以搜索数据

时间:2015-12-04 14:26:20

标签: php sql

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

例如,我有3个名为table1,table2和table3的表。每个表包含相同的字段:id,name,vehicle。只是说我想在2个表中找到一个名称,我该怎么做呢?表的数量是动态的,但我已经可以通过查询获取它们了。

获取表名的代码

$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,但仅限于一个表(第一个)。

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

4 个答案:

答案 0 :(得分:0)

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

SELECT *
FROM `table1`
WHERE `column_t1` IN (
    SELECT `column_t2`
    FROM `table2`
) AND IN (
    SELECT `column_t3`
    FROM `table3`
)

答案 1 :(得分:0)

while($row = mysqli_fetch_array($result))

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

答案 2 :(得分:0)

如果所有三个表具有相同的定义,我会在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

任何问题随后都可以随意询问。总是很乐意提供帮助。

答案 3 :(得分:0)

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

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'];
}
}