2015-04-01 65 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

相关问题