education
Goto Top

Access daten vergleichen

Morgen.
Ich stell mich gerade zu blöd an:

Ist zustand:
Täglich ändernde daten (rangliste, spieler kommen hinzu spieler gehen, punkte verändern sich)

daten kommen in TXT datei trennung per tab
Primekey ist der nick

import in acces geht ohne probleme.

sollzustand:
1.Ausgabe nickname, Punkte alt, punkte neu, und bestenfalls gleich die differenz
2. ausgabe nickname von spielern die sich nicht verändert haben


OK, die Abfrage das ich die differenz und die punkte von z.b. gestern und heute sehe klappt, zeigt mir aber nur an von den leuten die gestern und heute in der rangliste sind, soll aber auch anzeigen welche heute dazu gekommen sind.

Content-ID: 101921

Url: https://administrator.de/contentid/101921

Ausgedruckt am: 24.11.2024 um 03:11 Uhr

Biber
Biber 16.11.2008 um 12:46:19 Uhr
Goto Top
Moin education,

magst Du denn vielleicht Struktur der zwei (oder drei?) Tabellen posten?
Oder den Aufbau der TXT-Datei, deren Import ja klappt?
Und wie hast Du das "Datum", das ja in jedem Datensatz "logisch" vorhanden sein sollte physisch abgebildet?
Und wie geheim ist das Statement, das immerhin schon teilweise richtig ist? Lässt sich das auch hier veröffentlichen?

Sorry für die vielen Rückfragen statt einer erhofften Antwort, aber ich sehe anders keinen Ansatzpunkt.

Grüße
Biber
education
education 16.11.2008 um 16:20:39 Uhr
Goto Top
es wird jeden tag von hand ein copy gemacht und in eine txt eingefügt die dann in access importiert wird
die import sieht so aus:

Rang Charaktername Stufe Stadtausbau Stadtkasse

import wird:
rang charaktername stadtkasse

ich habe also für jeden tag eine extra tabelle, die abfrage läuft also immer auf der tabele von gestern und heute z.b. (abfrage muss von hand umgebaut werden auf aktuelle tabelle)

was ermittelt werden soll: was in eine stadtkasse einbezahlt wird in 24h von welchen leuten
Logan000
Logan000 17.11.2008 um 13:56:49 Uhr
Goto Top
Moin Moin

OK, die Abfrage das ich die differenz und die punkte von z.b. gestern und heute sehe klappt, zeigt mir aber nur an von den leuten die gestern und heute in der rangliste sind, soll aber auch anzeigen welche heute dazu gekommen sind.
Diese Abfrage wäre evtl. Hilfreich gewesen.

Wenn dich mal die differenzproblematik kurz beiseite lasse.
Versuch mal folgendes Statement (das must du natürlich auf deine Tabellen übersetzen):
SELECT * FROM UserHeute Left Join UserGestern on UserGestern.Charaktername = UserHeute.Charaktername

Damit solten dir alle User angezeigt werden die gestern und Heute existieren und natürlich auch alle Heute neu hinzugekommenen.

Gruß L.
education
education 17.11.2008 um 19:18:14 Uhr
Goto Top
Habs jetzt anders angefangen:

2. tabellen
Mitglieder
import

Abfrage1:
SELECT import.Charaktername, import.Stadtkasse
FROM Mitglieder RIGHT JOIN import ON Mitglieder.Charaktername = import.Charaktername
WHERE (((Mitglieder.Charaktername) Is Null));

und jetzt kommt das ganze in Mitglieder:
INSERT INTO Mitglieder ( Charaktername, Stadtkasse )
SELECT [Abfrage1-U].Charaktername, [Abfrage1-U].Stadtkasse
FROM [Abfrage1-U];

ALTER TABLE Mitglieder
ADD [neu] int; 
kann ich die reihe "neu" irgentwie so gestalten, das er automatisch das aktuelle datum nimmt oder müste ich des mit hilfe von einen makro machen?
oder ist es irgentwie möglich das ein popup auf geht und ich dort die bezeichnung der zeile eingeben kann?
Logan000
Logan000 18.11.2008 um 08:44:37 Uhr
Goto Top
Moin Moin

Du hast im deinem Post geschrieben
...soll aber auch anzeigen welche heute dazu gekommen sind.

Wenn du nun in Abfrage1 Nur diese selektierst die schon in der Tabelle Mitglieder enthalten sind, kannst du die "Neuen" nicht bekommem.

Und warum Importierst du die Charaktere, die in Mitglieder schon enthalten sind, nochmal?

Gruß L.
Biber
Biber 18.11.2008 um 11:19:06 Uhr
Goto Top
Moin education,

in meinem ersten Kommentar oben hatte ich schon gefragt, wie Du das logisch vorhandene Attibut "Datum" denn in Deinem Datenmodell abgebildet hast.
Danke für die wenn auch verspätete Antwort.
Dann sollten wir vielleicht dort aufsetzen, weil wir sonst dieses Konstrukt ja nie auf die Füße bekommen.

Also, angenommen in der Tabelle Mitglieder würden 2 Datumsfelder existieren namens "angelegt" und "letztes Update" (beide vom Typ "Datum/Uhrzeit"), dann könntest Du doch
  • erstmal alle bisher vorhandenen Mitglieder auf ein Erst-Anlagedatum setzen mit
UPDATE Mitglieder
SET angelegt = #2008/01/01#,
[letztes Update] = date();
  • und wenn denn mal ein Update ansteht gemäß Deiner Mini-Abfrage oben
INSERT INTO Mitglieder ( Charaktername, Stadtkasse, angelegt, [letztes Update] )
 SELECT [Abfrage1-U].Charaktername, 
[Abfrage1-U].Stadtkasse 03.FROM [Abfrage1-U],
date(), date();

Und dann kannst Du auch anhand des "angelegt"-Datums die "neuen" und "vorhandenen" Mitglieder unterscheiden.
Bei "vorhandenen Mitgliedern" musst Du dann naturlich nur das Feld "letztes Update", nicht aber das Feld "angelegt" updaten.

Grüße
Biber
education
education 18.11.2008 um 19:39:45 Uhr
Goto Top
danke euch beiden, den rest werde ich denke ich hinbekommen..

bin wieder mal 2schritte zuweit gewesen....
Biber
Biber 18.11.2008 um 20:58:07 Uhr
Goto Top
Moin education,

kleiner Nachtrag noch.
Da das Feld "angelegt" ja IMMER nur beim INSERT geändert wird, nie beim UPDATE, kannst Du ja auch den Defaultwert in der Tabelle auf "=date()" setzen. Dann brauchst Du das Feld nie selbst füllen und nie in der INSERT INTO Anweisung mit aufführen.

Also kein Aufwand... das ist immer gefüllt vorhanden....

Grüße
Biber