2015-04-01 70 views
0

我有一個名爲db_contacts的數據庫,它包含用於存儲各個聯繫人的每個帳戶的表。每個表的格式都是相同的,其中一個日期列被稱爲birthday如何從包含當前月份的日期的數據庫的所有表中搜索所有記錄?

我想要做的就是搜索db_contacts中每個表格的每個記錄,查找月份等於當前月份的日期。
有沒有辦法做到這一點只使用一個查詢,或者我將不得不分別查詢每個表?我真的在爲如何做到這一點而感到茫然。

我在想這樣的事情,但是這並不能在所有的工作:

$connection = new PDO("mysql:host=localhost", "foo", "bar"); 

$month = date("m"); 

$db = $connection->prepare(" 
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'birthday'"); 
$db->execute(); 

foreach ($db as $table) { 
    for ($i = 0; $i < sizeof($table); $i++) { 
     $db = $connection->prepare(" 
      SELECT birthday FROM $table[$i] WHERE MONTH('birthday') = $month;"); 
     $db->execute(); 

     foreach ($db as $row) { 
      echo $row[0]; 
     } 
    } 
} 
+0

我傾向於認爲你可以消除FOR($ 1 =。。。)循環,然後在每個表上執行第二次選擇FOREACH($ db ...。steps),並且可能不會在FOREACH循環中重新定義$ db – BigScar 2015-04-01 23:40:43

+0

我應該問一下爲什麼你對每個賬戶都有不同的表格?你可能會修復這些代碼,但是它會很多在一個查詢中更有效地完成它。我的Mysql雖然不夠好。 – 2015-04-01 23:45:52

+0

@TonyHopkinson我原本打算把所有賬戶的所有聯繫人都放在同一個表格中,但是認爲將它們組織起來更好。 – 2015-04-01 23:52:44

回答

0

我終於得到它通過以下工作:

$db = $connection->prepare(" 
    SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME LIKE 'birthday'"); 
$db->execute(); 

$month = date("m"); 

foreach ($db as $table) { 
    $db = $connection->prepare(" 
     SELECT birthday 
     FROM db_contacts.$table[0] 
     WHERE MONTH(birthday) = $month;"); 
    $db->execute(); 

    foreach ($db as $record) { 
     echo $record[0]; 
    } 
} 
+0

記住,因爲你沒有在dbms上這樣做,你會將大量的數據吸入你的web服務器,看看它是否是你需要的數據。 – 2015-04-02 08:42:38

相關問題