Page 1 of 1

mysql-query

Posted: 2005-04-26 20:13
by markusk
Hallo zusammen,

gleich zu beginn: Ich weiß, dies ist das falsche Forum hierfür, aber leider kenn ich kein anderes, und da ich hier schon oft Hilfe gefunden habe, will ich es mal hier probieren.

Ich hab eine Tabelle mit verschiedenen Inhalten. Ich will jetzt rausfinden, wie oft jeder Inhalt vorkommt, und dann nach dem Vorkommen sortiert ausgeben. Ist das soweit verständlich? Ist es möglich, das mit MySQL hinzubekommen?

Danke für eure Hilfe!

Re: mysql-query

Posted: 2005-04-27 07:56
by grafzahl
Natürlich geht das mit MySQL. Dazu wäre aber Deine Tabellstruktur wie Tabellenname, Spaltennamen, wonach Du suchst und wonach sortiert werden soll hilfreich.

Ohne diese Angaben scheint mir DISTINCT Dein Freund zu sein.

Re: mysql-query

Posted: 2005-04-27 09:54
by outofbound
select obsttyp, count(*) from obstsortiment group by obsttyp order by count(*)

selektiert wie oft jeder obsttyp in der Tabelle obstsortiment vorkommt und sortiert das nach der Anzahl.

Gruss,

Out

Re: mysql-query

Posted: 2005-04-27 12:52
by markusk
Super, GROUP BY war das, was mir gefehlt hat. Danke!

Re: mysql-query

Posted: 2005-04-27 13:24
by markusk
arrrgh, das reicht mir noch nicht. ich brauch noch eine zweite Query, die folgendes vollbringt:

Nehmen wir mal folgenden Aufbau an:

Code: Select all

1   a   1
2   a   1
3   b   1
4   a   2
5   a   1
6   b   1
7   b   2
Spalte 1: ID, Spalte 2: Inhalt, Spalte 3: Gruppe
Jetzt will ich die Anzahl der Zeilen auslesen, die einen Wert enthalten. Nach diesem Wert muss der Wert 'a' kommen, und beide Werte müssen in der selben Gruppe sein. Ist das verständlich?

d.h. ich erhalte in diesem Beispielt die ID 1 und 3, will also den Wert 2 (also die Anzahl der Treffer) als Ergebnis haben. Warum ich 1 erhalte, ist klar. 3 muss ich erhalten, weil die Zeile mit der ID 3 der Gruppe 1 angehört, und der nächste Wert in dieser Gruppe ist ID 5, und der ist 'a'.

Konnte mir jemand folgen? :)

Re: mysql-query

Posted: 2005-04-27 13:31
by outofbound
Nein, jetzt wirds abstrus...

Mach mal ein ordentlich benamstes Beispiel mit was du hast, und was du haben willst.

Und vor allem keine Zahlenspielchen. Erstell gescheite Testdaten. ;)

Re: mysql-query

Posted: 2005-04-27 13:36
by markusk
:)
Ein konkretes Beispiel: Ich hab in einer Tabelle ein fortlaufende ID, eine Spalte mit einem Link, und eine User-ID. Die Tabelle wurde gefüllt, als User auf eine Seite rumgesurft sind: die aktuelle URL in die Tabelle, dazu eine User-ID.

Jetzt will ich wissen, welche Seite, nachdem der User auf Seite X war, am häufigsten angesurft wurde.

Besser? :)

Re: mysql-query

Posted: 2005-04-27 18:28
by phillux
Hoffe, ich verstehe dich richtig?

Du möchtest die am häufigste, besuchte URL von einem bestimmten User herausfinden?

Als Parameter hast Du die User-ID?

Re: mysql-query

Posted: 2005-04-27 18:33
by markusk
Nein. Das wär ja kein Problem.

Nehmen wir an, /index.php ist die Startseite. Nun will ich wissen, welche Seiten der User angesurft hat, NACHDEM er auf dieser index.php war.

Das lässt sich ja herausfinden, weil die alle in die Datenbank geschrieben sind.

Re: mysql-query

Posted: 2005-04-27 18:34
by outofbound
Da musst du entweder das Datenbankdesign ändern oder über mehrere Querries abdeckeln.

Re: mysql-query

Posted: 2005-04-27 18:41
by phillux
markusk wrote: Nun will ich wissen, welche Seiten der User angesurft hat, ...
Was denn nu? :wink: Willst nur ALLE Seiten wissen, auf denen ein User war? Oder willst Du wissen, auf welcher Seite er am häufigsten war? Oder willst Du für jeden User wissen, auf welcher Seite er war?

Gruß, Phil

Re: mysql-query

Posted: 2005-04-27 18:44
by markusk
Hast du einen Vorschlag, in welcher Weise ich es ändern sollte?

Ich habe es schon hinbekommen, allerdings klappt das dann nur mit einer Query, wenn die ID der seite /index.php genau 1 tiefer ist als die ID der Folgeseite:

Code: Select all

SELECT
	history1.`path` AS 'path',
	COUNT(history1.`path`) AS 'count',
	history1.`id`
FROM
	`pathtable` AS history1,
	`pathtable` AS history2 
WHERE 
	history1.`id` - 1 =  history2.`id`
	AND
	history2.`path` = 'index.php'
	AND
	history1.`userid` = history2.`userid`
GROUP BY 
	history1.`path`
ORDER BY 
	'count' DESC

Re: mysql-query

Posted: 2005-04-27 18:45
by markusk
Phillux wrote:Was denn nu?
Ich will wissen, welche Seite von der index.php aus am häufigsten angesurft wurde. Das is schon ne komplizierte Sache :)

Re: mysql-query

Posted: 2005-04-27 18:54
by outofbound
Ã?ndere einfach dein Datenbankdesign:

zielseite | quellseite anfügen.

Dann kannst du das ganz einfach selektieren.

In der obigen Tabelle kannst du das sonst nicht referenzieren. ;)

Re: mysql-query

Posted: 2005-04-27 19:15
by markusk
Jo, aber woher weiß ich die Zielseite wenn die Quellseite gegeben ist? Referer kann ich nicht benutzen, da die ja oft deaktiviert sind, und alle Links auf allen Seiten mit einem zusätzlichen Paramter zu versehen sprengt auch die Möglichkeiten... Glaub mir, ich hab mir das schon alles durch den Kopf gehen lassen, aber ich komme einfach auf keinen grünen Zweig :(

Re: mysql-query

Posted: 2005-04-27 19:20
by phillux
markusk wrote:Jo, aber woher weiß ich die Zielseite wenn die Quellseite gegeben ist? Referer kann ich nicht benutzen, da die ja oft deaktiviert sind, und alle Links auf allen Seiten mit einem zusätzlichen Paramter zu versehen sprengt auch die Möglichkeiten... Glaub mir, ich hab mir das schon alles durch den Kopf gehen lassen, aber ich komme einfach auf keinen grünen Zweig :(
Aber das ist ja dann nicht ein Problem des Datenbank Designs. Wenn Du den Referer nicht weisst und dem Link keinen Parameter mitgeben kannst/willst dann wüsste ich nicht, wie Du herausfinden kannst, von welcher Seite der User kam.

Re: mysql-query

Posted: 2005-04-27 19:45
by markusk
Ja, die einzige Möglichkeit ist, das über die IDs rauszufinden

Durch

Code: Select all

SELECT `path` FROM ... WHERE `userid` = 1 ORDER BY `id` ASC
kann ich aber rausfinden, von wo nach wo der User gewandert ist. Das geht also. Dann muss das andere also auch irgendwie gehen, oder? :)

Re: mysql-query

Posted: 2005-04-27 21:49
by phillux
markusk wrote: Ich habe es schon hinbekommen, allerdings klappt das dann nur mit einer Query, wenn die ID der seite /index.php genau 1 tiefer ist als die ID der Folgeseite:

Code: Select all

SELECT
	history1.`path` AS 'path',
	COUNT(history1.`path`) AS 'count',
	history1.`id`
FROM
	`pathtable` AS history1,
	`pathtable` AS history2 
WHERE 
	history1.`id` - 1 =  history2.`id`
	AND
	history2.`path` = 'index.php'
	AND
	history1.`userid` = history2.`userid`
GROUP BY 
	history1.`path`
ORDER BY 
	'count' DESC
Meiner Meinung nach, ist das mit dem Deinem aktuellen System dann die einzige Möglichkeit. Es sei denn, du kannst den Referer auslesen, bzw. die vorherige Seite genau identifizieren. Und dann würde ich das Tabellen-Design so ändern, wie OutOfBound vorgeschlagen hat.

Gruß, Phil

Re: mysql-query

Posted: 2005-04-27 22:10
by markusk
Ja, aber der Referer wird nicht von 100% aller Rechner mitgesendet -> Die Statistitk wird verfälscht. Und ich kann auch nicht alle Links ändern, das sprengt wie gesagt die Möglichkeiten.

Gut, dann werde ich es wohl so machen, wie ich geschrieben habe. Der einzige Unterschied: Beim Schreiben der Daten muss ID = ID + 1 gesetzt werden, auto_increment funnktioniert also nicht. Dadurch wird das Schreiben etwas verlangsamt, das wollte ich umgehen. Aber gut, trotzdem Danke für eure Mühe!

Re: mysql-query

Posted: 2005-04-28 00:28
by phillux
Du könntest vielleicht auch jeweils die aktuelle Seite in einer Session speichern und so im Folgeskript wieder auslesen. Vielleicht eine Möglichkeit das Problem mit dem Referer zu umgehen.

Re: mysql-query

Posted: 2005-04-28 09:25
by outofbound
Mal nebenher: Wie stellst du fest, ob der User nicht den Zurück button verwendet, oder aus den Bookmarks drauf zugreift, oder einen Preloader verwendet?

Weil dann funktioniert dein Ansatz überhaupt nicht, weil du eben keine Referenz von Seite A -> Seite B hast.

Auch eine MySQL kann Daten die nicht existieren nicht aus reiner Luft erzeugen. (Nämlich die fehlende Referenzierung),

Gruss,

Out

Re: mysql-query

Posted: 2005-04-28 14:09
by Joe User
Hint: session + unixtime + pageid