如何从数据库中的所有表中搜索包含当前月份的日期的所有记录?
How can I search all records from all tables in a database for dates that contain the current month?
我有一个名为 db_contacts
的数据库,它包含每个帐户的 tables 来存储他们的个人联系人。每个 table 的格式都相同,其中一个日期列称为 birthday
。
我想要做的是在 db_contacts
中的每个 table 中搜索每条记录,以查找月份等于当前月份的日期。
有没有办法只使用一个查询来执行此操作,还是我必须分别查询每个 table?我真的不知道该怎么做。
我在想这样的事情,但这根本行不通:
$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];
}
}
}
我终于通过以下方法让它工作了:
$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];
}
}
我有一个名为 db_contacts
的数据库,它包含每个帐户的 tables 来存储他们的个人联系人。每个 table 的格式都相同,其中一个日期列称为 birthday
。
我想要做的是在 db_contacts
中的每个 table 中搜索每条记录,以查找月份等于当前月份的日期。
有没有办法只使用一个查询来执行此操作,还是我必须分别查询每个 table?我真的不知道该怎么做。
我在想这样的事情,但这根本行不通:
$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];
}
}
}
我终于通过以下方法让它工作了:
$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];
}
}