У меня есть 5 различных вызовов базы данных для сбора данных от пользователей:
$stmt=$db->prepare('SELECT members.email, sites.username, sites.time, sites.id, sites.url, sites.title
FROM sites
LEFT JOIN members
ON members.username=sites.username
LEFT JOIN list_friends
ON
(CASE
WHEN friend1 = :username THEN friend2
WHEN friend2 = :username THEN friend1
END) = sites.username
WHERE sites.username=:username
OR (list_friends.friend1 <> :username)
OR (list_friends.friend2 <> :username)
ORDER BY sites.time ASC');
$stmt->bindParam(':username', $username);
$stmt->execute();
$row2 = $stmt->fetchAll();
Каждый вызов базы данных является уникальной переменной fetchAll: $ row, $ row1, $ row2 и т. Д.
Затем я создаю 5 различных массивов на основе этих данных.
foreach( $row2 AS $sites_table ) {
$data[] = array(
'type' => 'sites',
'id' => $sites_table["id"],
'time' => $sites_table["time"],
'site' => $sites_table["url"],
'title' => $sites_table["title"],
'username' => $sites_table["username"],
'email' => $sites_table["email"]
);
}
У меня есть функция сравнения
function cmp($a, $b) {
$ad = new DateTime($a['time']);
$bd = new DateTime($b['time']);
if ($ad == $bd) {
return 0;
}
return $ad < $bd ? -1 : 1;
}
И, наконец, я делаю сортировку на основе этого сравнения.
if (isset($data) && $data !== NULL) {
usort($data, "cmp");
for($i=(count($data)-1)-($feed-1);$i>=(0);$i--){
if ($i >= 0) {
// echo out result of arrays
}
}
}
Моя конечная цель состоит в том, чтобы все отображаемые данные были отсортированы по данным ['time'], причем самые последние данные ['time'] всегда отображались вверху, а затем следующие последние и следующиескоро.
К сожалению, похоже, что сортировка работает только по массиву, по пользователю, а не по всем данным массивов, объединенным для всех пользователей вместе взятых.
, поэтому он отображает вывод, такой как
user1 -> $row1 -> 1 minute ago
user2 -> $row5 -> 30 seconds ago
user1 -> $row2 -> 10 seconds ago
user3 -> $row1 -> 4 minutes ago
user1 -> $row1 -> 2 minutes ago
user2 -> $row1 -> 45 seconds ago
user2 -> $row5 -> 55 seconds ago
etc.
Так, как мне сделать алгоритм сортировки, который показывает последние метки времени по порядку независимо от строки или пользователя
user1 -> $row2 -> 10 seconds ago
user2 -> $row5 -> 30 seconds ago
user2 -> $row1 -> 45 seconds ago
user2 -> $row5 -> 55 seconds ago
user1 -> $row1 -> 1 minute ago
user1 -> $row1 -> 2 minutes ago
user3 -> $row1 -> 4 minutes ago
etc.