我试图在表中搜索可能包含在表列表中的条目。
例如,我有三个表,分别命名为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'];
}
}