Benutzer Diskussion:Bully1966/UserStatistics

Aus Perrypedia
Zur Navigation springen Zur Suche springen

Hi Bully, auf welcher mysql-Version sind wir denn? Ich bin ein wenig Oracle-lastig, daher muss ich mir die Syntax usw. mal anschauen. Ich finde so einzeilige, zusammengeklatsche SQLs auch recht schwer zu lesen (nur so am Rande ;-))).


SELECT COUNT(*) AS Counter 
FROM 
	(SELECT MIN(rev_id), 
		rev_user, 
		rev_page 
	 FROM revision 
	  GROUP BY rev_page 
	  ORDER BY rev_page, 
                   rev_timestamp)
 	AS tt, page

WHERE rev_user        = 4 
  AND rev_page        = page_id 
  AND page_is_redirect=0 
ORDER BY rev_page

Um nur mal die Fragestellung zu konkretisieren, du kannst das mit der augenblicklichen Version der Datenbank nicht machen und möchtest jetzt eine Lösung in Richtung join haben, ja? Ich schau mal, Gruß Frank.

BTW, ich antworte hier, dann belasten wir Wolfgangs Diskussion-Thread nicht mit solchen "Sachen" ;-)) -- FGFuzaxx 17:36, 22. Mär 2006 (CET)

Was hat eigentlich das , page für einen Sinn? -- FGFuzaxx 17:38, 22. Mär 2006 (CET)

Hallo FGFuzaxx, also erst einmal zu dem Zusammenklatschen des SQL-Statements: Ich bin ein C und C++ Entwickler und habe von SQL von tuten und blasen keine Ahnung und schon gar nicht, wie man es formtieren sollte. :-) Das zur Einleitung; In meinem Wiki habe ich die MySQL Version 4.1.x. In dieser Funktionieren SubQuerys. In der Version der Perrypedia 4.0.x ist dies noch nicht implemnetiert. Dies ist auch der Grund warum das SQL-Statement hier nicht funktioniert und dadurch kommt hier dieser Fehler <usercreate>Bully1966</usercreate>. Das inner SQL - Statement funktioniert auf der Tabelle revision und das ergenis wird in tt zwischen gespeichert. Die zweite Tabelle heißt page und wird mit tt zusammen durch geführt. Der Vorschlag war dies mit einem Join zumachen, aber ich habe davon keine Ahnung. Wenn du noch weitere Fragen hast, dann werde ich versuchen dir sie zu beantworten. --Bully1966 21:41, 22. Mär 2006 (CET)
Hi Bully, der Witz an der Sache ist, dass das Statement so schon ein Join ist, nämlich zwischen tt und page. Das Statement ON <expression> ist optional. War mir nicht bewusst, und da ich nur ein Access zum testen meiner Gedanken habe, führte das auch zu meinen Verwirrungen ;-)). Na gut. Eine einfach Vorgehensweise wäre eine temporäre Zwischentabelle aus dem Select-Statement in der from-Clause zu machen. Also create table temp -> insert <from-expr.> into temp -> select from temp, page -> drop table temp. Ist aber glaube ich nicht so richtig performant ;-))) Ich schau mal weiter -- FGFuzaxx 11:57, 23. Mär 2006 (CET)
Also nochmals vielen Dank, das sich ein SQL - Spezialist sich dieses Problem annimmt. An die temporäre Tabelle habe ich auch schon gedacht, aber wie das in MySQL geht, weiß ich auch nicht. Desweiteren habe ich in meinem Wiki festgestellt, das man nur die Dokumente Zählen sollte, die in ganz bestimmten Namensräumen sind. Hierzu wurde das Statment erweitert:
SELECT COUNT(*) AS Counter 
FROM 
	(SELECT MIN(rev_id), 
		rev_user, 
		rev_page 
	 FROM revision 
	  GROUP BY rev_page 
	  ORDER BY rev_page, 
                   rev_timestamp)
 	AS tt, page

WHERE rev_user        = 4 
  AND rev_page        = page_id 
  AND page_is_redirect= 0 
  AND page_namesspace = 0 
ORDER BY rev_page

Hier werden nur die Dokument gezählt, die im normalen Namensraum sind, also keine Diskussionen, Verwaltungsseiten, usw. --Bully1966 12:23, 23. Mär 2006 (CET)

Eigentlich habe ich gerade keine Zeit ;-)), aber probier das mal:

drop table if exists test;

create table test
(min not null,
rev_user,
rev_page,
primary key (min));

insert into test
 SELECT MIN(rev_id), 
	rev_user, 
	rev_page 
 FROM $revision 
 WHERE rev_user        = 4 
  AND  rev_page        = page_id 
 GROUP BY rev_page 
 ORDER BY rev_page, rev_timestamp;


SELECT COUNT(*) AS Counter 
FROM 
  test, page
WHERE rev_user        = 4 
  AND rev_page        = page_id 
  AND page_is_redirect= 0 
  AND page_namesspace = 0 
ORDER BY rev_page;

drop table test;

Gruß, Frank -- FGFuzaxx 17:30, 23. Mär 2006 (CET)

Also, grundsätzlich geht es mit der Zwischentabelle, nur konnte ich sie nicht im Query anlegen. Dies habe ich dann in der Datenbank gemacht. Dies ist nicht schön und Benutzer:Alexander Nofftz wird das nicht lustig finden, schon gar nicht nach der letzten Woche! Außerdem Fehl mir dazu dann noch der Befehl um den Inhalt der Tabelle löschen. Des weiteren weiß ich nicht wie das mit der Performance und dem Mehrfachzugriff so abgeht. Es gibt auch temporäre Tabellen für Query und soll auch in der Version von MYSQL unterstützt werden, die Perrypedia nutzt. Aber die Doku ist schlecht und ich habe keine Beispiele gefunden, wie man das macht. Ich werde weiter forschen. --Bully1966 13:23, 24. Mär 2006 (CET)

Ich habe gerade nachgelesen, das man temporäre Tabellen extra aktiviert werden müssen. Mittlerweile glaube ich, das das hochziehen der Datenbank auf 4.1.x einfacher ist als diese Funktion durchzuführen. --Bully1966 13:41, 24. Mär 2006 (CET)

Aufbau der temporären Tabelle:

CREATE TABLE `databasename`.`tabellename` 
(
  min int(8) unsigned NOT NULL auto_increment,
  -- Key to page_id. This should _never_ be invalid.
  rev_page int(8) unsigned NOT NULL,
  -- Key to user_id of the user who made this edit.
  -- Stores 0 for anonymous edits and for some mass imports.
  rev_user int(5) unsigned NOT NULL default '0',

  PRIMARY KEY rev_page_id (rev_page, min),
  UNIQUE INDEX min (min)
) TYPE=InnoDB;

WikiBot

Hallo Bully1966,

ich habe deine Erweiterung auf Stargate Wiki installiert und sie läuft super. Nur zwei Probleme bzw. Fragen habe ich. Kannst du eine Möglichkeit schaffen das Benutzer aus der Liste ausgeschlossen werden? Es geht mir dabei um die Gruppe der Bots. Wir setzen einen Bot in Stargate Wiki ein und der landet natürlich auf einem der ersten Plätze.

Das zweite ist das es keinen Unterschied macht ob ich die Top Liste mit dem Parameter all benutze oder ohne. Die Zahlen bleiben immer gleich. Ist das ein Fehler im Programm oder in der Beschreibung, soll heißen die Funktions ist gar nicht eingebaut?

Vielen Dank

René (Admin Stargate Wiki) 217.17.16.2 17:55, 12. Aug. 2007 (CEST)

Variablen

Hallo, kann man in die <usereditfirst> tags auch variablen einbauen? z.b. <usereditfirst>{{{1}}}</usereditfirst> oder <usereditfirst>{{Pagename}}</usereditfirst>? --84.189.81.25 15:03, 4. Mai 2008 (CEST)