mysql-query

MySQL, PostgreSQL, SQLite
markusk
Posts: 140
Joined: 2003-05-04 20:14

mysql-query

Post by markusk » 2005-04-26 20:13

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!

grafzahl
Posts: 19
Joined: 2002-09-11 19:39

Re: mysql-query

Post by grafzahl » 2005-04-27 07:56

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.

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: mysql-query

Post by outofbound » 2005-04-27 09:54

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

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 12:52

Super, GROUP BY war das, was mir gefehlt hat. Danke!

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 13:24

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? :)

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: mysql-query

Post by outofbound » 2005-04-27 13:31

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. ;)

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 13:36

:)
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? :)

phillux
Posts: 80
Joined: 2004-03-16 13:47
Location: Münster

Re: mysql-query

Post by phillux » 2005-04-27 18:28

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?

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 18:33

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.

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: mysql-query

Post by outofbound » 2005-04-27 18:34

Da musst du entweder das Datenbankdesign ändern oder über mehrere Querries abdeckeln.

phillux
Posts: 80
Joined: 2004-03-16 13:47
Location: Münster

Re: mysql-query

Post by phillux » 2005-04-27 18:41

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

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 18:44

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
Last edited by markusk on 2005-04-27 18:46, edited 1 time in total.

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 18:45

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 :)

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: mysql-query

Post by outofbound » 2005-04-27 18:54

Ã?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. ;)

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 19:15

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 :(

phillux
Posts: 80
Joined: 2004-03-16 13:47
Location: Münster

Re: mysql-query

Post by phillux » 2005-04-27 19:20

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.

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 19:45

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? :)

phillux
Posts: 80
Joined: 2004-03-16 13:47
Location: Münster

Re: mysql-query

Post by phillux » 2005-04-27 21:49

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

markusk
Posts: 140
Joined: 2003-05-04 20:14

Re: mysql-query

Post by markusk » 2005-04-27 22:10

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!

phillux
Posts: 80
Joined: 2004-03-16 13:47
Location: Münster

Re: mysql-query

Post by phillux » 2005-04-28 00:28

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.

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: mysql-query

Post by outofbound » 2005-04-28 09:25

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

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: mysql-query

Post by Joe User » 2005-04-28 14:09

Hint: session + unixtime + pageid
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.