[SQLite]SELECT mit doppelt vorhandener ID

Ichthys

Lt. Commander
Registriert
März 2008
Beiträge
1.493
Hallo Leute,

habe ein Problem mit einer SELECT-Abfrage. Ich möchte per DB nachvollziehen können, wie sich jemand auf einer Webseite bewegt hat. Bei einem Besucher kann es vorkommen, dass er eine Seite zweimal besucht hat, und wenn ich dies in der DB abfragen möchte, kommt es zu Problemen.
Nehmen wir mal an, die Anfrage lautet SELECT seitenname from Seite WHERE s_id IN (15,12,15,18,19), dann würde SQLite aber nur die Namen von 15,12,18 und 19 ausspucken. Auch wenn ich es mit SELECT seitenname from seite WHERE s_id=15 OR s_id=12 OR s_id=15 (usw) probiere, läuft es auf das gleiche hinaus.
Kann man da was machen?
 
Was würde mir das bringen? Mit select scount(s_id) würde ich doch lediglich die Anzahl der Ergebnisse bekommen, oder?
 
Die Dateinamen, die hinter den IDs stecken. Also wenn ich z.B. hinter den IDs 1,2,3,4,5 die Namen a, b, c, d, e stecken, hätte ich gerne nach dem Befehl SELECT seitenname from seite WHERE s_id IN (1,2,1,3,4,5) das Ergebnis a b a c d e. Derzeitig würde er mir aber bloß a b c d e auspucken, also die zweite "1" ignorieren.
 
Schonmal was von JOIN gehört?

Wenn du die Tabelle in der steht was welcher User alles aufgerufen hast, mit der Tabelle in der die Seitendefinitionen stehen verknüpfst, müsste das machbar sein...

So wie du das willst kann das nicht funktionieren ;)
 
@redasurc: Nein, 2 Posts über dir hat er ja geschrieben was raus kommen soll. Die Zahlen sind die IDs der Seite und die Buchstaben die Seitennamen. Also käme bei deinem Beispiel:
a 1
b 2
c 3
... usw. raus.

Zum Problem: So wie Mojo es geschrieben hat sollte es funktionieren. Einen JOIN über die IDs der aufgerufenen Seite und die IDs in der Tabelle mit der Zuweisung der Namen. Also z.B.
Nehmen wir an in der Tabelle "seiten" steht die Zuordnung von einer Seiten ID zu einem Seitennamen und in der Tabelle "abrufe" steht die Zuordnung user zu aufgerufener Seite.

SELECT seiten.name FROM seiten, abrufe WHERE seiten.id = abrufe.id AND abrufe.user_id = xy;

Zumindest sollte das so gehen, wenn ich mich nicht ganz irre.

Werden die Ergebnisse denn irgendwie weiter verarbeitet (PHP o.ä.)? Dann könntest du im Notfall das auch über den PHP Code lösen, indem du die IDs in PHP auflöst (z.B. die Definition in ein Array schreiben).
 
Geht es denn wirklich nur über JOIN? Ich kenne mich mit JOIN nicht wirklich aus, weiß nur, dass man damit Abfragen über mehrere Tabellen machen kann.
Außerdem ist es ja in diesem Fall nicht so wichtig, welcher Besucher wie einen Besuch macht. Es geht nur darum, welcher Besuchablauf wie oft vorkam.
Ich habe die IDs der Seitennamen in der Aufrufreihenfolge vorhanden und möchte nur noch die entsprechenden Namen dazuhaben.
@Redasurc:
Nein, das gewünschte Ergebnis wäre
1 a
2 b
1 a
3 c
4 d
5 e

Tafelmolch schrieb:
Werden die Ergebnisse denn irgendwie weiter verarbeitet (PHP o.ä.)? Dann könntest du im Notfall das auch über den PHP Code lösen, indem du die IDs in PHP auflöst (z.B. die Definition in ein Array schreiben).
Ja, ich verarbeite es in C# weiter. Deine Idee ist gar nicht so schlecht. Vermutlich werde ich es so lösen, denn die Infos sind "anonymisiert". Ich habe nur die reinen Besuchabläufe zur Verfügung, kann sie also an dieser Stelle nur schwer jemanden zuordnen (auch wenn dies vermutlich nicht unmöglich ist).
 
Zuletzt bearbeitet:
Dann ist COUNT und GROUP BY dein Freund...
 
dann sollte ein group by doch reichen
SELECT max(seitenname) as Seitenname,count(*) as AnzahlAufrufe from seite WHERE s_id IN (1,2,3,4,5)
group by s_ID
 

Ähnliche Themen

Zurück
Oben