2015-12-04 52 views
1

我正試圖搜索表中可能包含在表中的一個條目。循環遍歷表名稱來搜索數據

例如,我有3個名爲table1,table2和table3的表。每個表格都包含相同的字段:標識,名稱,車輛。只是說我想找到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,但僅限於一個表格(第一個)。

如果您不明白,我想查找可能存在於多個表中的數據並將其列出。 我希望我能得到一些幫助。

+1

如果你有三個結構相同的表,其中唯一的區別是在表名一個數字,那麼你構建你數據庫嚴重不足....有__one__表,並有一個附加的「tid」數字列,所有內容都會更加容易 –

+1

將所有3個表的結果聯合在一個子查詢中,然後從內聯視圖中選擇。儘管我同意Mark的觀點,但我在這裏質疑表格設計。 'select * from(select * from table1 union all select * from table2 union all select * from table3)subqry where col ='desiredvalue'' – xQbert

+0

模式不僅限於您所知道的設計標準... – Flosculus

回答

0

您可以使用2個子查詢來判斷列的值是否在其他2個表中。

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

這種說法是壓倒你循環

0

具有相同定義的所有三個表的$ 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 

任何問題,然後隨意問。總是樂於提供幫助。

0

我認爲你必須爲第二查詢結果更改$行名稱:

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