anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Fr 29 Mär, 2024 00:10

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Di 25 Aug, 2009 15:42 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Di 25 Aug, 2009 16:00 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
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? :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Di 25 Aug, 2009 22:22 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Mi 26 Aug, 2009 14:47 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Mi 26 Aug, 2009 18:36 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Mi 26 Aug, 2009 18:57 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Do 27 Aug, 2009 00:42 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
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! :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Do 27 Aug, 2009 10:29 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Do 27 Aug, 2009 11:58 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
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

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Do 27 Aug, 2009 12:26 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Do 27 Aug, 2009 12:41 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
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. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Do 27 Aug, 2009 14:56 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [Ressource][SQL] VIEW‘s
BeitragVerfasst: Do 27 Aug, 2009 17:12 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
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 ;-)

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 29 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum