我的 MySQL 数据库中有 10-20 个日志表。每个表包含 50-100.000 行。我需要将它们导出到 XML 并按创建日期对它们进行排序。
联合是一个不错的选择,因为表不包含相同的列(一个表可能包含 3 列,另外 30 列)。
这就是我创建 XML 的方式:
// Events
$stmt = $db->query("
SELECT id, columnX, created
FROM table1
");
$row_count = $stmt->rowCount();
if ($row_count != '0') {
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$event = $xml->createElement("event");
$events->appendChild($event);
$event->appendChild($xml->createElement("ID", "XXXX"));
$event->appendChild($xml->createElement("columnX", $row['columnX']));
$event->appendChild($xml->createElement("created", $row['created']));
}
}
// Other events
$stmt = $db->query("
SELECT id, columnY1, columnY2, columnY3, created
FROM table2
");
$row_count = $stmt->rowCount();
if ($row_count != '0') {
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$event = $xml->createElement("event");
$events->appendChild($event);
$event->appendChild($xml->createElement("ID", "XXXX"));
$event->appendChild($xml->createElement("columnY1", $row['columnY1']));
$event->appendChild($xml->createElement("columnY2", $row['columnY2']));
$event->appendChild($xml->createElement("columnY3", $row['columnY3']));
$event->appendChild($xml->createElement("created", $row['created']));
}
}
有人知道如何解决这个问题吗?
最佳答案
我建议使用 INSERT INTO ... SELECT ... UNION ... SELECT
构造将所有数据提取到(临时)表中。 INSERT INTO ... SELECT
允许您直接将选择结果插入到表中。 UNION
允许您连接 SELECT 结果。因为它是一个数据库语句,所以一切都发生在 DBMS 中。
之后,使用 select 获取按日期字段排序的数据,并使用 XMLWriter 创建 XML。
关于PHP - 从多个 MySQL 查询创建 XML 并按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42794942/