Avatar billede henninghabor Nybegynder
13. april 2016 - 18:23 Der er 3 kommentarer

MySQLi Group by

Hej,

Det er godt nok lang tid siden at jeg har oprettet et spørgsmål herinde, men jeg har altså lidt problemer med en forespørgsel til min MySQL database.

Tabellen

CREATE TABLE `dpp_statistics` (
  `id` int(11) NOT NULL,
  `date_time` datetime NOT NULL,
  `remote_addr` varchar(15) COLLATE utf8_danish_ci NOT NULL,
  `php_self` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `query_string` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `http_referer` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `http_user_agent` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

Min forespørgsel

        if($results = $mysqli->query("SELECT DATE_FORMAT(`date_time`, '%d.%m.%Y %H:%i:%s') AS `date_time`, `remote_addr`, `php_self` FROM `dpp_statistics` ORDER BY `id` DESC")) {
            while($row = $results->fetch_array()) {
                $date_time = $row["date_time"];
                $remote_addr = $row["remote_addr"];
                $php_self = $row["php_self"];

                $output .= "<div class=\"box-a\">\n";
                $output .= "<p>" . $date_time . "</p>\n";
                $output .= "</div>\n";
                $output .= "<div class=\"box-a\">\n";
                $output .= "<p><a href=\"http://" . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"] . "?ip=" . urlencode($row["remote_addr"]) . "\" title=\"" . $remote_addr . "\">" . $remote_addr . "</a></p>\n";
                $output .= "</div>\n";
                $output .= "<div class=\"box-b\">\n";
                $output .= "<p>" . $php_self . "</p>\n";
                $output .= "</div>\n";
                $output .= "<div class=\"box-clear\">\n";
                $output .= "</div>\n";
            }

            $results->close();
        }

Det jeg gerne vil er følgende:

Resultatet skal være samlet (group by) i `remote_addr` og sorteret nedadgående (order by `id` desc).

Bruger jeg ovenstående forespørgsel sorterer den ikke korrekt, når det kommer op på serveren hos one.com.

Jeg kunne endvidere godt tænke mig at resultatet viser den seneste forekomst af `php_self` der hører til `remote_addr`.

Jeg har læst mig lidt frem til at group_concat måske er løsningen.
Avatar billede jakobdo Ekspert
14. april 2016 - 09:14 #1
Prøv evt. at smid noget "dummy" data, til hvordan dine data ser ud.
Og hvad du rent faktisk ønsker af output fra dette data med en given query.
Avatar billede henninghabor Nybegynder
14. april 2016 - 10:34 #2
SELECT `id`, `remote_addr`, `php_self` FROM `dpp_statistics` GROUP BY `remote_addr` ORDER BY `id` DESC LIMIT 0, 10

giver følgende:

(419, '127.0.0.1', '/admin/statistik.php'),
(376, '64.246.165.140', '/index.php'),
(369, '31.13.113.77', '/kontakt.php'),
(357, '199.201.64.138', '/index.php'),
(340, '176.20.231.224', '/index.php'),
(327, '46.30.211.25', '/index.php'),
(273, '173.252.88.92', '/tjek-ind.php'),
(272, '173.252.74.122', '/tjek-ind.php'),
(270, '31.13.112.117', '/tjek-ind.php'),
(194, '31.13.98.115', '/betingelser.php'),
(190, '62.44.135.116', '/index.php'),
(186, '176.20.16.51', '/index.php'),
(185, '94.191.185.71', '/index.php'),
(161, '216.163.188.227', '/betingelser.php'),
(95, '5.186.149.78', '/index.php'),
(74, '77.233.239.106', '/index.php'),
(71, '80.62.117.106', '/index.php'),
(18, '31.13.113.82', '/admin/index.php'),
(13, '176.22.109.133', '/index.php'),
(12, '31.13.112.116', '/index.php'),
(11, '31.13.112.120', '/index.php'),
(10, '31.13.113.90', '/index.php'),
(1, '62.61.139.130', '/index.php');

Det er det resultat, jeg vil opnå og det er det resultat, jeg får på min lokale server. Men når det bliver smidt op på one.com's server, er dataene ikke sorteret og `php_self` er ikke det seneste `id`.

Det jeg ønsker er:

Hent data fra databasen,
sorter `id` desc
grupper det, så der kun er en forekomst af hver `remote_addr`,
skriv seneste forekomst af `php_self`

Jeg kan ikke forklare det anderledes, så jeg håber at jeg har gjort mig forståelig. Ellers må du gerne sige til. :)
Avatar billede jakobdo Ekspert
14. april 2016 - 10:44 #3
Måske du skal kigge lidt i denne retning:

http://stackoverflow.com/questions/1066453/mysql-group-by-and-order-by
Det lugter lidt af samme spørgsmål som du stiller her.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester