anpera.net
https://anpera.homeip.net/phpbb3/

[Ressource][SQL] VIEW‘s
https://anpera.homeip.net/phpbb3/viewtopic.php?f=43&t=4985
Seite 1 von 1

Autor:  Eliwood [ Di 25 Aug, 2009 15:42 ]
Betreff des Beitrags:  [Ressource][SQL] VIEW‘s

Dieses mal keine VIEW’s-Factory, sondern eine Sammlung von VIEW’s, die man verwenden kann. VIEW’s sind spezielle Pseudo-Tabellen mit eingebauten Filter-Funktionen. Das beste Beispiel, wo man solche VIEW’s einsetzen kann, ist die Tabelle accounts - und die mehrfach vorhandene SELECT-Abfrage nach Online-Charakteren. Funktioniert wie auch die anderen netten MySQL-Features nur ab MySQL 5.

$this->bbcode_second_pass_code('', 'CREATE VIEW loggedin AS
SELECT * FROM accounts WHERE
locked = 0 AND
loggedin = 1 AND
laston > FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) - (
SELECT value FROM settings WHERE setting = 'LOGINTIMEOUT'
))')

Nach dem Erstellen der Pseudo-Tabelle mit obigem Code kann man ganz einfach Charaktere holen, die Online sind:
$this->bbcode_second_pass_code('', 'SELECT acctid, name, login FROM loggedin')
Die Tabelle respektiert dabei das logintimeout dank eines Verschachtelten SELECT’s. Damit spart man sich die ständige Datum-Konventiererei mit PHP.

Mal sehn ob ich noch weitere sinvolle Verwendungsmöglichkeiten für VIEW’s finde.

Edit: Zweites laston durch NOW() ausgetauscht.

Autor:  Linus [ Di 25 Aug, 2009 16:00 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Auch eine nette Idee mit dem View. Die machen vorerst mal nichts kaputt! :D

Nach eingehendem Studium der Dokus zu den Triggern bin ich zu der Ansicht gekommen, dass man diese wohl mit bedacht einsetzen sollte. Denn bei Fehlerchen in den Triggern wird das Debuggen äußerst schwer werden! :?

EDIT: Bist du sicher das dieser View funktioniert? Das tut er bei mir leider nicht! Es werden mir ein Haufen Spieler angezeigt die schon länger offline sind.

Zitat:
laston > FROM_UNIXTIME(UNIX_TIMESTAMP(laston) - (
SELECT value FROM settings WHERE setting = 'LOGINTIMEOUT'
))
Ich sehe da auch keine Stelle an der die aktuelle Zeit in die Berechnung eingeht, sondern es wird sowohl vor als auch nach nach dem Minuszeichen laston für die Berechnung heran gezogen! Müsste doch irgendwie "laston > aktuelle Zeit - LOGINTIMEOUT" darin zu finden sein. Oder bin ich mal wieder auf dem Holzweg? :?

Autor:  Eliwood [ Di 25 Aug, 2009 22:22 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Verdammt.
Ein Flüchtigkeitsfehler. Okay. Ja, müsste NOW() sein, nicht laston. Sorry. ;)

Wegen den Triggern: Ja, natürlich muss man sich sicher sein, dass der Query das tut, was er soll - aber zumindest bei SQL-Fehlern bricht die Triggererstellung ab. Man muss sie bedacht einsetzen und wie ich geschrieben habe, wissen, was man tut. Und immerhin gibt es noch SHOW TRIGGERS - damit man eine übersicht hat, was für Trigger denn da rumschwirren.

Autor:  Linus [ Mi 26 Aug, 2009 14:47 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Eliwood hat geschrieben:
Verdammt.
Ein Flüchtigkeitsfehler. Okay. Ja, müsste NOW() sein, nicht laston. Sorry. ;)

Hehe. Kein Grund sich zu entschuldigen. Wenn es Einen gibt der für Flüchtigkeitsfehler Verständnis zeigt so bin ich das! ;)
Danke für die schnelle Korrektur, so funzt der View prima.

Autor:  Harthas [ Mi 26 Aug, 2009 18:36 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Wenn du hier diesen Beitrag schon aufgemacht hast - Kannst du mir ev. den Unterschied von VIEW's zu Stored Procedures erklären?

Im übrigen finde ich die Idee mit den Views, als auch die Trigger-Factory eine sehr hübsche Idee.

Autor:  Eliwood [ Mi 26 Aug, 2009 18:57 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

VIEWs sind, soweit ich das beurteilen kann, verwandt mit Tabellen und werden zum Beispiel auch von SHOW TABLES gelistet. Man kann sie wie Tabellen behandeln, sortieren wie man will.

Stored Procedures ruft man mit CALL auf und verhalten sich wie Funktionen ohne Rückgabewert. Alternativ gäbe es noch Funktionen, die einen Rückgabewert haben und u.a. mit SELECT gerufen werden. Funktionen sind in PostgreSQL ziemlich intressant, da kann man nämlich auch C verwenden - oder mit nem Addon Python.

Autor:  Linus [ Do 27 Aug, 2009 00:42 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Eliwood hat geschrieben:
VIEWs sind, soweit ich das beurteilen kann, verwandt mit Tabellen und werden zum Beispiel auch von SHOW TABLES gelistet. Man kann sie wie Tabellen behandeln, sortieren wie man will.
Wobei leider jeder VIEW eine eigene Tabelle zu repräsentieren scheint. Erkennbar an dem Kommentar "VIEW" (MySQLDumper), bzw. in phpMyAdmin am Typ "Ansicht". Editieren lassen sie sich dort leider nicht, nur löschen und neu erstellen! ;)

Und mit dem Sichern und Wiederherstellen hapert es da auch! Ein Backup auf dem localen Server eingespielt bringt beim Versuch den View zu nutzen eine Fehlermeldung: "There is no 'xxx'@'localhost' registered". Schaut so aus das dort irgendwie der Ersteller des VIEWs mitgesichert wird! Ändert sich also der Name des Datenbanknutzers kann man den VIEW nur noch löschen und neu erstellen! :(

Autor:  Eliwood [ Do 27 Aug, 2009 10:29 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Natürlich lassen sich Views nicht bearbeiten, da ein View gar keine "eigenen" Spalten besitzt. Was man dem PHPMyAdmin ankreiden könnte, wäre, dass er über SHOW CREATE VIEW ein Interface zur Bearbeitung bereitstellen könnte, was er aber nicht tut. phpMyAdmin ist sehr auf die Bedürfnisse alter MySQL-Versionen ausgelegt. Ersetzen könnte man den View mit ALTER VIEW, Syntax ist die selbe wie beim Create.

Und ja, das mit dem Speichern ist mir auch schon aufgefallen, dass der mysql-dumper da Mist baut. Im Prinzip kann man alles zwischen "CREATE" und "VIEW" löschen.

Autor:  Auric [ Do 27 Aug, 2009 11:58 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Wenn man beim CREATE den richtigen Konventionen folgt, kann man in die VIEWs sogar Daten per INSERT oder UPDATE einspeisen. Die Lektüre dessen im MySQL-Manual kann ich nur empfehlen.

Und für die, die damit noch immer nichts anfangen können: VIEWs sind im Prinzip nichts anderes als abgespeicherte SELECT-Querys, auf denen man jeweils wieder wie eine Tabelle (zumindest lesend) zugreifen kann.

Auric

Autor:  Linus [ Do 27 Aug, 2009 12:26 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Eliwood hat geschrieben:
Und ja, das mit dem Speichern ist mir auch schon aufgefallen, dass der mysql-dumper da Mist baut. Im Prinzip kann man alles zwischen "CREATE" und "VIEW" löschen.
Ich werde mich hierzu mal im Dumper-Forum äußern, eigentlich ist DSB immer recht froh, wenn er von derartigen Unpässlichkeiten informiert wird, und bestrebt das im nächsten Release zu fixen.

Autor:  Eliwood [ Do 27 Aug, 2009 12:41 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Linus hat geschrieben:
Eliwood hat geschrieben:
Und ja, das mit dem Speichern ist mir auch schon aufgefallen, dass der mysql-dumper da Mist baut. Im Prinzip kann man alles zwischen "CREATE" und "VIEW" löschen.
Ich werde mich hierzu mal im Dumper-Forum äußern, eigentlich ist DSB immer recht froh, wenn er von derartigen Unpässlichkeiten informiert wird, und bestrebt das im nächsten Release zu fixen.


Ich sprach nicht von "dem" MySQLDumper, sondern vom Kommandozeilen-Werkzeug "mysqldump", das bei MySQL mitgeliefert wird. Das, was auch PHPMyAdmin verwendet. ;)

Autor:  Linus [ Do 27 Aug, 2009 14:56 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Eliwood hat geschrieben:
Ich sprach nicht von "dem" MySQLDumper, sondern vom Kommandozeilen-Werkzeug "mysqldump", das bei MySQL mitgeliefert wird. Das, was auch PHPMyAdmin verwendet. ;)

Da hab ich dich wohl falsch verstanden! Und dennoch, da ich den MySQL-Dumper nutze gibt es bereits jetzt eine Problemlösung für mich! Der Daniel ist schneller als die Polizei erlaubt! :D

Zitat:
Danke für den Hinweis.
Beim Speichern der CREATE-Anweisung eines VIEWS wird der aktuelle MySQL-User als DEFINER mit abgespeichert. Spielt man dieses Backup nun auf einem andern Server wieder ein, dann bleibt dieser Eintrag erhalten, obwohl es den User auf dem neuen System gar nicht gibt. Das führt zu dem Problem.

Ich habe das nun so gelöst, indem beim Einspielen einer CREATE ALGORITHM-Anwesung der DEFINER herausgelöst und durch den aktuellen MySQL-User ersetzt wird. Dadurch sollte das nun behoben sein und auch bei Fremdbackups problemlos funktionieren.

Hol Dir die functions_restore.php oder das ganze Paket (Downloadlink auf der Portalseite ganz unten in der mittleren Box) aus der soeben hochgeladenen Revision 457 im SVN.
Damit sollte das nun problemlos funktionieren.

Die Änderung fliesst natürlich mit in die nächste Version 1.24 RC1.9 ein.

Autor:  Auric [ Do 27 Aug, 2009 17:12 ]
Betreff des Beitrags:  Re: [Ressource][SQL] VIEW‘s

Neben dem DEFINER kann man auch noch INVOKER anlegen, was sich womöglich auch hier Lohnt, wenn man die Views nur mit dem Admin-Account anlegen möchte, da man seinem lotgd-account keine Strukturrechte geben möchte.

Hui, Post 10001 in diesem Forum ;-)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/