我正在尝试在表中搜索可能包含在表列表中的条目。
例如,我有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,但仅限于一个表(第一个)。
如果您不理解,我想查找可能存在于多个表中的数据并将其列出。 我希望我能得到一些帮助。
答案 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'];
}
}