Ich verwende PHP, um Informationen über drei MySQL-Datenbanken zu berichten und zusammenzuführen. Die Daten aus MySQL sind im Grunde:Mehrere MySQL-Ergebnisse aus PHP zusammenführen, dieselbe Sortierung/Sortierung verwenden
SELECT email, money FROM accounts ORDER BY email
Und in PHP implementiert ich eine merge (Einfügen zum Spaß):
$inputs = array(); // Elements of ['row'=>array, 'statement'=>PDOStatement]
while (count($inputs) > 0) {
$minimumInput = NULL;
$currentOutput = new OutputRow();
// Find minimum input
foreach ($inputs as $input) {
list($row, $statement) = $input;
if (is_null($minimumInput) || $row->email < $minimumInput->email) {
$minimumInput = $input['row'];
}
}
// Merge all matching inputs
$currentInput = 0;
do {
if ($inputs[$currentInput]['row']->email === $minimumInput->email) {
mergeDataToOutputRow($currentOutput, $inputs[$currentInput]['row']);
$fetch = $inputs[$currentInput]['statement']->fetch(PDO::FETCH_OBJ);
if ($fetch === FALSE) {
array_splice($inputs, $currentInput, 1); // that input is exhausted
} else {
$inputs[$currentInput]['row'] = $fetch;
}
} else {
$currentInput++;
}
} while ($currentInput < count($inputs));
// None of the inputs now match CURRENTOUTPUT
output($currentOutput);
}
Dieser Algorithmus setzt voraus, dass die Sortierung in MySQL (ORDER BY email
) zur Sortier identisch ist in PHP ($row->email < $minimumInput->email
). Wie kann ich bestätigen, dass diese Anforderung für alle möglichen (einschließlich nicht lateinische) Eingänge erfüllt ist?
'<' auf Strings macht selten Sinn. und wenn du es mit nicht-lateinisch zu tun hast (ich vermute, du meinst nicht-ascii), ist es noch schlimmer. PHP ist nicht unicode bewusst und wird Dinge viel anders als mysql vergleichen, weil php Zeichen-als-einzelne-Bytes vergleichen wird, nicht Zeichen-dass-kann-Multibyte sein. –
Hier ist der letzte Code, mit dem Sie mehrere MySQL-Abfragen kombinieren und Datensätze kombinieren können, wenn sie denselben eindeutigen Schlüssel haben: https://gist.github.com/fulldecent/a4cac03087caadec4c275a54317a6f623 –