php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 19-05-2014, 17:54
Nils81
 Registrierter Benutzer
Links : Onlinestatus : Nils81 ist offline
Registriert seit: May 2014
Beiträge: 18
Nils81 befindet sich auf einem aufstrebenden Ast
Standard Datenbank up to date halten

Hallo ihr lieben, habe ne kleine frage...
es geht um "projekte" die nach ablaufzeit automatsch auf den freigabestatus false gesetzt werden.

habe in der db auch schon die erstellungzeiten nebst ablaufdatum für die einzelnen projekte.
jetzt würde es mich interessieren wie ich es schaffe, dass die datenbank automatisch den wert des freigabestatus bei erreichen des datum auf false setzt, ohne das ein admin on kommen muss um die projekte halt up to date zu halten.

von wegen select ablaufdatum from projekte where freigabe = true;

if(aktuelles datum > als ablaufdatum )
{
setze freigabe von projekt auf false;
}
so würde ich es machen wenn der admin die db immer clean halten sollte...

Ich möchte es aber das dass system es automatisch macht...

WIE GEHT DAS BITTESCHÖN ???????
Mit Zitat antworten
  #2 (permalink)  
Alt 19-05-2014, 19:20
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du kannst es über einen Cronjob lösen (Vollautomatisch) oder du legst es auf eine Seite, die von Leuten besucht wird und lässt gleichzeitig ein Update über die Datenbank laufen (könnte auf die Performance gehen).

Cronjobanbieter gibt es viele. Einfach die große Suchmaschine befragen.

Wenn du es mit PHP lösen willst, dann musst die Daten aus der Datenbank lesen, durch Kontrolle laufen lassen und mittels update korrigieren.
Einfacher und weniger Performancefressend wäre ein Trigger auf der Datenbank selbst, der wenn ein Tabellenzugriff passiert den Trigger ausführen lässt welcher die Kontrolle durchführt und wenn notwendig den Eintrag bearbeitet.
Mit Zitat antworten
  #3 (permalink)  
Alt 19-05-2014, 22:02
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Nils81 Beitrag anzeigen
habe in der db auch schon die erstellungzeiten nebst ablaufdatum für die einzelnen projekte.
jetzt würde es mich interessieren wie ich es schaffe, dass die datenbank automatisch den wert des freigabestatus bei erreichen des datum auf false setzt, ohne das ein admin on kommen muss um die projekte halt up to date zu halten.
Wozu? Du hast doch die Ablaufzeit. Das sollte ausreichen.
Mit Zitat antworten
  #4 (permalink)  
Alt 20-05-2014, 12:47
Nils81
 Registrierter Benutzer
Links : Onlinestatus : Nils81 ist offline
Registriert seit: May 2014
Beiträge: 18
Nils81 befindet sich auf einem aufstrebenden Ast
Standard

Danke schonmal für den tip mit dem triggern, habe das aber versucht mit events und prozeduren zu lösen...
nur bekomme ich das irgendwie nicht so richtig hin.

habe die prozedur erstellt und mit dem event verknüpft
hier die prozedur:
das event wird jeden tag ausgeführt.
jetzt habe ich das problem, dass wenn ich die prozedur manuel ausführe andert er nicht die daten also die freigabe der betroffenen tupel wird nicht auf 0 gesetzt obwohl das ablaufdatum kleiner als das aktuelle datum ist
Code:
begin
declare uid int;
select ablaufdatum from projekt;
if (ablaufdatum < now())
then
update projekt set freigabe = 0;
end if;
select user_user_id into uid from projekt where freigabe=0;
update user set projektanzahl = projektanzahl-1 where user_id=uid;
end
Mit Zitat antworten
  #5 (permalink)  
Alt 20-05-2014, 17:39
Nils81
 Registrierter Benutzer
Links : Onlinestatus : Nils81 ist offline
Registriert seit: May 2014
Beiträge: 18
Nils81 befindet sich auf einem aufstrebenden Ast
Standard

So... nach vielen rumversuchen, habe ich dann doch eine lösung gefunden, die dann gerne hier posten möchte:
(glaube so wird es gerne gesehen, wenn ich mich nicht verlesen habe).


durch die automatisierung erreiche ich das die projekte die ihre deadline erreicht haben in eine andere tabelle(für abgelaufene und gelöschte projekte) geschrieben werden, dannach wird beim user der erstellten projekte die anzahl von maximal 10 erstellten projekte um -1 reduziert(je nachdem wieviele projekte an demselben tag abgelaufen sind)
dannach werden das/die projekt(e) aus der tabelle für laufende projekte entfernt.

hier der code für die prozedur:
Code:
begin
update projekt set freigabe = 0 where current_date() > ablaufdatum;
update user set projektanzahl=projektanzahl-1 where user_id= any (select user_user_id from projekt where current_date() > ablaufdatum);
insert into abgelaufene_projekte(projekt_id,titel,kurzbeschreibung,beschreibung,kategorie,ablauf_datum,user_id)
select projekt_id,titel,kurzbeschreibung,beschreibung,kategorie,ablaufdatum,user_user_id from projekt where freigabe = 0;
delete from projekt where freigabe = 0;
end
Mit Zitat antworten
  #6 (permalink)  
Alt 20-05-2014, 20:37
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wozu gibst du die abgelaufenen Projekte in eine extra Tabelle? Ist doch unnötig. Du machst dir so viel Aufwand für etwas, das dir nichts bringt.
Mit Zitat antworten
  #7 (permalink)  
Alt 22-05-2014, 01:13
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich kenne den weiteren Hintergrund nicht und vielleicht hat es irgendwo einen Sinn, aber ohne dieses wissen denke wie die anderen.
Das ist total aufwendig.

Wenn du einfach auf die Ablaufzeit im Skript so selektierst, sodass diese nicht mehr angezeigt werden hast du immer eine aktuelle Ausgabe ohne das du etwas bearbeiten müsstest und du würdest für immer wissen wann das Projekt abgelaufen ist.
Wenn du dann wirklich ganz sicher sein willst, mach ich mir hin und wieder zur Unterstützung einen Flag mit einer Zahl.

Hier hab ich dann zum Beispiel so ein Schema... 0=deaktiviert 1=Bearbeitung 2=veröffentlicht 3=privat 4=abgelaufen 9=gelöscht

Ich bin ursprünglich davon ausgegangen das du Sicherungen machen möchtest bzw. diese entfernen möchtest oder der gleichen.
Mit Zitat antworten
  #8 (permalink)  
Alt 22-05-2014, 09:35
Nils81
 Registrierter Benutzer
Links : Onlinestatus : Nils81 ist offline
Registriert seit: May 2014
Beiträge: 18
Nils81 befindet sich auf einem aufstrebenden Ast
Standard

Ich schreibe die projekte in eine extra tabelle, da der chef möchte, dass sie noch 1 jahr nach ablauf gespeichert werden.
wenn ich sie denn in der gleichen tabelle lasse wie die aktiven, habe ich das problem dass die projektanzahl der user jeden tag nach der prozedur um -1 oder mehr reduziert werden, weil (wenn projekt current_date() > ablaufdatum) update user projektanzahl -1. und wenn nun noch mehrere abgelaufene projekte in der tabelle stehen reduziert der jeden tag um -1, bzw. -n und das soll nicht geschehen.
nach nochmaligen überdenken, hätte ich die projekte drin stehen lassen können, wenn ich das ablaufdatum gelöscht hätte aber weil ich die prozedur noch ein wenig erweitert habe um eine funktion die die abgelaufenen projekte nach 12 monaten atomatisch löscht, brauchte ich das ablaufdatum.

Geändert von Nils81 (22-05-2014 um 09:50 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 22-05-2014, 21:23
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Nils81 Beitrag anzeigen
Ich schreibe die projekte in eine extra tabelle, da der chef möchte, dass sie noch 1 jahr nach ablauf gespeichert werden.
wenn ich sie denn in der gleichen tabelle lasse wie die aktiven, habe ich das problem dass die projektanzahl der user jeden tag nach der prozedur um -1 oder mehr reduziert werden, weil (wenn projekt current_date() > ablaufdatum) update user projektanzahl -1. und wenn nun noch mehrere abgelaufene projekte in der tabelle stehen reduziert der jeden tag um -1, bzw. -n und das soll nicht geschehen.
Du hast redundante Daten in deiner Datenbank. Deine ganzen Updates kannst du dir sparen. Die Daten lassen sich alle on-demand ermitteln. Du machst dir 10mal so viel Aufwand, wie sein müsste.

Zitat:
Zitat von Nils81 Beitrag anzeigen
nach nochmaligen überdenken, hätte ich die projekte drin stehen lassen können, wenn ich das ablaufdatum gelöscht hätte aber weil ich die prozedur noch ein wenig erweitert habe um eine funktion die die abgelaufenen projekte nach 12 monaten atomatisch löscht, brauchte ich das ablaufdatum.
Wozu das Ablaufdatum löschen? Wenn das Projekt abgelaufen ist, hat es ein Ablaufdatum. Punkt, aus. Wozu doktorst du da herum?
Mit Zitat antworten
  #10 (permalink)  
Alt 22-05-2014, 23:05
iBumsti
 Registrierter Benutzer
Links : Onlinestatus : iBumsti ist offline
Registriert seit: Jan 2007
Beiträge: 73
iBumsti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du machst dir das Leben an der falschen Ecke schwer.
Das muss doch leichter gehen. Vergiss mal dein -1 Update. Ich versteh nicht warum das benötigst?

Beispiel vereinfacht dargestellt...

Code:
DB
Projekte
ID | User | Projekt | Ablaufdatum timestamp/Datum
1  | Name | Blabla1 | gestern
1  | Name | Blabla2 | heute vor 30 Minuten
1  | Name | Blabla3 | morgen um 12
1  | Name | Blabla4 | in einer Woche um 21:00
usw....
Welche nicht abgelaufenen Projekte hat der User?
Code:
Select * FROM Projekte 
WHERE 
  user = Name 
AND
  Ablaufdatum >= 'als jetzt timestamp/Datum'
Ablaufdatum < 'als jetzt timestamp/Datum' wäre dann genau anders rum. Was ist abgelaufen?

Darf der User noch ein Projekt anlegen?
Code:
Select count(id) from Projekte
WHERE
  user = Name
AND
  Ablaufdatum >= als jetzt
PHP-Code:
$count Ergebnis;
IF(
$COUNT 10) {
 
$erlaubnis false; -- zB Anlageformular laden...
}else{
 
$erlaubnis true; -- zB Sorrydarst nicht mehr...

Mehr würdest du nicht benötigen und müsstest so nie was löschen und/oder verschieben usw.
Zudem sparst du Zeit und Resourcen.

Und wie gesagt wennst ganz sicher sein willst. aktiv = 1 oder 0
zB
Code:
WHERE .... AND aktiv = 1
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Join on T1.date=T2.date OK. Aber nicht OK wenn Datum formatiert Danusus SQL / Datenbanken 6 17-02-2013 17:34
Datenbank skalierbar halten carapau SQL / Datenbanken 2 12-11-2011 21:15
leeres Datum (date) in Datenbank speichern! enzenpe SQL / Datenbanken 4 17-02-2007 21:45
Warning: date() [function.date]: Unexpected error voodoo PHP Developer Forum 1 08-08-2004 19:50
a:Active halten CoreX HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 3 31-05-2003 00:42

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:12 Uhr.