JOIN und letztes Datum einer Tabelle

zipfermaerzen

Neuer Benutzer
Beiträge
2
Hallo Liebe Community,

sitze jetzt schon seit mehreren Stunden an diesem Problem. Google war auch nicht so hilfreich - oder zumindest nicht so das ichs verstanden hab.
Hab folgende Tabellen
hcum
ID_Member | Member | Rang | Eintrittsdatum
hcumdata
ID_Data | ID_Member | Date | Gamelevel | Ruhm

Möchte jetzt eine Tabelle ausgeben die so aussehen sollte.
Member - Rang - Ruhm usw.
Dabei soll der Ruhm immer nur vom letzten Datum Date kommen.
Bitte nicht wundern wegen den ganzen .wpdd->prefix . Ist für Wordpress
Jetzt sieht die Abfrage mal folgendermaßen aus.

$sql = $wpdb->get_results("SELECT ".$wpdb->prefix."hcum.*,".$wpdb->prefix."hcumdata.* FROM ".$wpdb->prefix."hcum LEFT JOIN ".$wpdb->prefix."hcumdata ON ".$wpdb->prefix."hcum.ID_Member=".$wpdb->prefix."hcumdata.ID_Member GROUP BY ".$wpdb->prefix."hcum.ID_Member ORDER BY ".$wpdb->prefix."hcumdata.Date desc");

Gibt mir zwar alle Member aus aber nur mit dem ersten Wert der gefunden wird.
Hoffe ich habs halbwegs erklärt das mans kapiert.
Ich weiss sieht nicht grade professionell aus :-)

Vielleicht kann mir da jemand helfen.

LG
Marco
 
Werbung:
Wenn Du gruppierst, müssen alle anderen Spalten entweder auch gruppiert oder aggregiert sein. Vermeide das * in der Select-Liste und zähle alle gewünschten Spalten auf. Achtung: MySQL erkennt NICHT, wenn Spalten im Select-Teil weder aggregiert noch gruppiert sind, und liefert statt einer Fehlermeldung ein falsches Resultat. Kapott halt.
 
Danke für deine Antwort, hat mir aber jetzt nicht wirklich geholfen :(
Ich komm einfach nicht drauf. Mir Platz gleich mein Kopf.
Mir wird hier immer der falsche Wert ausgegeben egal was ich da mache.
Kann doch nicht so schwer sein nur die letzte Zeile eines Eintrages (wp_hcumdata) zum jeweiligen User (wp_hcum) zuzuordnen.
Hier mal für Fiddle wenn jemand probieren mag.
Die Tabellen
Code:
-- phpMyAdmin SQL Dump
-- version 5.0.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Erstellungszeit: 03. Mrz 2020 um 19:05
-- Server-Version: 10.4.11-MariaDB
-- PHP-Version: 7.4.2

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

--
-- Datenbank: `wordpress`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `wp_hcum`
--

CREATE TABLE `wp_hcum` (
  `ID_Member` int(11) NOT NULL,
  `Member` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Rang` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Eintrittsdatum` date DEFAULT NULL,
  `Aktiv` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Vorgemerkt` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `wp_hcum`
--

INSERT INTO `wp_hcum` (`ID_Member`, `Member`, `Rang`, `Eintrittsdatum`, `Aktiv`, `Vorgemerkt`) VALUES
(49, 'Member 1', 'Prätorianer', '2020-03-01', 'on', NULL),
(50, 'Member 2', 'Prätorianer', '2020-03-02', 'on', NULL),
(51, 'Member 3', 'Prätorianer', '2020-03-03', 'on', NULL),
(52, 'Member 4', 'Prätorianer', '2020-03-04', 'on', NULL);

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `wp_hcumdata`
--

CREATE TABLE `wp_hcumdata` (
  `ID_Data` int(11) NOT NULL,
  `ID_Member` int(11) DEFAULT NULL,
  `Date` datetime DEFAULT current_timestamp(),
  `Gamelevel` int(11) DEFAULT NULL,
  `Geschenke` int(11) DEFAULT NULL,
  `Ruhm` int(11) DEFAULT NULL,
  `RL_Punkte` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `wp_hcumdata`
--

INSERT INTO `wp_hcumdata` (`ID_Data`, `ID_Member`, `Date`, `Gamelevel`, `Geschenke`, `Ruhm`, `RL_Punkte`) VALUES
(69, 49, '2020-03-03 18:01:47', 1, 1, 1, 1),
(71, 50, '2020-03-03 18:02:34', 11, 11, 11, 11),
(72, 51, '2020-03-03 18:02:43', 111, 111, 111, 111),
(73, 52, '2020-03-03 18:02:52', 1111, 1111, 1111, 1111),
(74, 49, '2020-03-03 18:03:00', 2, 2, 2, 2),
(75, 50, '2020-03-03 18:03:12', 22, 22, 22, 22),
(76, 51, '2020-03-03 18:03:22', 222, 222, 222, 222),
(77, 52, '2020-03-03 18:03:31', 2222, 2222, 2222, 2222),
(78, 49, '2020-03-03 18:03:39', 3, 3, 3, 3),
(79, 50, '2020-03-03 18:03:47', 33, 33, 33, 33),
(80, 51, '2020-03-03 18:03:56', 333, 333, 333, 333),
(81, 52, '2020-03-03 18:04:06', 3333, 3333, 3333, 3333);

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `wp_hcumdata2`
--

CREATE TABLE `wp_hcumdata2` (
  `ID_Data2` int(11) NOT NULL,
  `ID_Member` int(11) DEFAULT NULL,
  `turnierteilnahmen` int(11) DEFAULT NULL,
  `turniergold` int(11) DEFAULT NULL,
  `turniersilber` int(11) DEFAULT NULL,
  `turnierbronze` int(11) DEFAULT NULL,
  `kampfstaerkekomplett` int(11) DEFAULT NULL,
  `verliesteilnahmen` int(11) DEFAULT NULL,
  `heldstaerke` int(11) DEFAULT NULL,
  `tslevel` int(11) DEFAULT NULL,
  `erfolge` int(11) DEFAULT NULL,
  `klassezimmerer` int(11) DEFAULT NULL,
  `klassekaempfer` int(11) DEFAULT NULL,
  `klasseschatzmeister` int(11) DEFAULT NULL,
  `klassekoch` int(11) DEFAULT NULL,
  `klassebergarbeiter` int(11) DEFAULT NULL,
  `klassealchemist` int(11) DEFAULT NULL,
  `klassetechniker` int(11) DEFAULT NULL,
  `aenderungsdatum` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `aenderunguser` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `wp_hcumsettings`
--

CREATE TABLE `wp_hcumsettings` (
  `ID_Settings` int(11) NOT NULL,
  `Clanname` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  `erfolgegesamt` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `wp_hcumsettings`
--

INSERT INTO `wp_hcumsettings` (`ID_Settings`, `Clanname`, `erfolgegesamt`) VALUES
(1, 'Clanname', 242);

--
-- Indizes der exportierten Tabellen
--

--
-- Indizes für die Tabelle `wp_hcum`
--
ALTER TABLE `wp_hcum`
  ADD PRIMARY KEY (`ID_Member`);

--
-- Indizes für die Tabelle `wp_hcumdata`
--
ALTER TABLE `wp_hcumdata`
  ADD PRIMARY KEY (`ID_Data`);

--
-- Indizes für die Tabelle `wp_hcumdata2`
--
ALTER TABLE `wp_hcumdata2`
  ADD PRIMARY KEY (`ID_Data2`);

--
-- Indizes für die Tabelle `wp_hcumsettings`
--
ALTER TABLE `wp_hcumsettings`
  ADD PRIMARY KEY (`ID_Settings`);

--
-- AUTO_INCREMENT für exportierte Tabellen
--

--
-- AUTO_INCREMENT für Tabelle `wp_hcum`
--
ALTER TABLE `wp_hcum`
  MODIFY `ID_Member` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=53;

--
-- AUTO_INCREMENT für Tabelle `wp_hcumdata`
--
ALTER TABLE `wp_hcumdata`
  MODIFY `ID_Data` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=82;

--
-- AUTO_INCREMENT für Tabelle `wp_hcumdata2`
--
ALTER TABLE `wp_hcumdata2`
  MODIFY `ID_Data2` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=48;
COMMIT;
Meine klaglos gescheiterten Versuche
Code:
-- based on answer https://stackoverflow.com/a/7745635/808921
SELECT MAX(wp_hcumdata.Date),wp_hcum.Member,wp_hcumdata.Ruhm
FROM wp_hcum
    LEFT JOIN wp_hcumdata ON wp_hcum.ID_Member=wp_hcumdata.ID_Member
GROUP BY wp_hcumdata.ID_Member
ORDER BY wp_hcumdata.Date desc;

SELECT wp_hcum.Member,wp_hcumdata.Ruhm,wp_hcumdata.Date
FROM wp_hcum
    LEFT JOIN wp_hcumdata ON wp_hcum.ID_Member=wp_hcumdata.ID_Member
ORDER BY wp_hcumdata.Date desc;
  
SELECT wp_hcum.Member,wp_hcumdata.Ruhm,wp_hcumdata.Date
FROM wp_hcum
    LEFT JOIN wp_hcumdata ON wp_hcum.ID_Member=wp_hcumdata.ID_Member;

Ich steig da nicht dahinter.
Brauch nur einen Denkanstoss :(:(
 
Zuletzt bearbeitet:
Werbung:
ich schrieb: wenn Du gruppierst, müssen alle Spalten entweder gruppiert oder aggregiert sein.

Dein SQL:

Code:
SELECT MAX(wp_hcumdata.Date),wp_hcum.Member,wp_hcumdata.Ruhm
FROM wp_hcum
   LEFT JOIN wp_hcumdata ON wp_hcum.ID_Member=wp_hcumdata.ID_Member
GROUP BY wp_hcumdata.ID_Member
ORDER BY wp_hcumdata.Date desc;

Du hast im Result 3 Spalten, davon ist eine eine Aggregation. Du hast nach einer Spalte, die nicht im Result ist, gruppiert. Das ist syntaktisch falsch, völlig falsch. MySQL ist hier blind und liefert irgendwas, nur leider keinen Fehler.

Ich arbeite mit PostgreSQL und habe jetzt keinen Nerv mehr, Deinen Dump dafür umzuschreiben und eine Lösung zu bauen. Tag war zu lang ...

Kann doch nicht so schwer sein nur die letzte Zeile eines Eintrages (wp_hcumdata) zum jeweiligen User (wp_hcum) zuzuordnen.

Code:
select spalte1, max(spalte2) from tabelle group by spalte1;

wäre die prinzipielle Abfrage.

PS.: das Konzept der referentiellen Integrität ist weitgehend unbekannt, oder?
 
Zurück
Oben