php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 03-07-2010, 11:34
SusiSorglos
 Registrierter Benutzer
Links : Onlinestatus : SusiSorglos ist offline
Registriert seit: May 2007
Ort: Farfaraway 02203
Beiträge: 71
SusiSorglos ist zur Zeit noch ein unbeschriebenes Blatt
Standard Datum vorausberechnen?

Hallo,
ich habe wieder ein Problem wo ich nicht weiter weis.

Ich möchte gerne mittels (INTERVAL) Datensätze zwischen StartDatum und EndDatum ausgeben lassen. Dieses FifferenzDatum sollte genau 1 Monat sein.

Also z.B. User meldet sich am 15.02.2009 an, jetzt möchte ich gerne das er alle Datensätze im AKTUELLEN Monat, dem 15.06.2010 und dem 15.07.2010 aufgelistet bekommt. Ich habe es so einigermaßen hinbekommen aber das ist leider etwas zu ungenau. Ich habe die Tage von Anmeldedatum bis Heute durch 30.42 Tage geteilt. Und das ganze dann mittels CEIL gerundet. Diesen Wert habe ich dann in meinem SQLQuery genutzt. Nur leider ist diese Methode zu ungenau.

Gibt es dafür vielleicht eine bessere Möglichkeit?


Code:
	$sql = "SELECT DATEDIFF(NOW(), anmeldung) as differenz ";
        $sql .= "FROM `user` WHERE `id` = '123456789' LIMIT 1";
	$query0 = mysql_query($sql, $db_connect);
	$diffmonat = mysql_fetch_row($query0);
	$calcmonat = ceil($diffmonat['0']/30.42-1);



	$sql = "SELECT *, ";

	$sql .= "DATE_FORMAT(anmeldung, '%d.%m.%Y - %H:%i') AS fanmeldung, ";
	$sql .= "DATE_FORMAT(indexend, '%d.%m.%Y - %H:%i') AS findexend, ";
	$sql .= "DATE_ADD(indexend, INTERVAL `ival` DAY) AS indexnext, ";
	
	$sql .= "DATE_ADD(anmeldung, INTERVAL ".$calcmonat." MONTH) AS startmonat, ";
	$sql .= "DATE_ADD(anmeldung, INTERVAL ".$calcmonat."+1 MONTH) AS endemonat, ";

	$sql .= "FROM user ";
	$sql .= "left join kunden ON kunden.id = user.id ";
	$sql .= " WHERE `user`.`id` = '123456789' LIMIT 1";
Cu SusiSorglos
__________________
PHP 7.2, MySQL 5.7 auf U16.04

Geändert von SusiSorglos (03-07-2010 um 12:24 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 03-07-2010, 11:46
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

bitte Beitrag bearbeiten und nur den reinen SQL-Code darstellen. PHP-Code stört in diesem Unterforum nur bei der Fehlersuche.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 03-07-2010, 11:53
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Warum so umständlich?

SELECT ... WHERE col BETWEEN CURDATE() AND DATE_ADD(CURDATE(),30)
Mit Zitat antworten
  #4 (permalink)  
Alt 03-07-2010, 12:04
SusiSorglos
 Registrierter Benutzer
Links : Onlinestatus : SusiSorglos ist offline
Registriert seit: May 2007
Ort: Farfaraway 02203
Beiträge: 71
SusiSorglos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich glaube das ist nicht ganz das was ich suche, oder?

Ich möchte aus dem Verlauf vom 15.02.2009 einen Bereich ausgeben. Das wäre bei heutigen Datum [03.07.2010] also der Bereich 15.06.2010 - 12:00:00 bis 15.07.2010 - 11:59:59 Uhr.
__________________
PHP 7.2, MySQL 5.7 auf U16.04
Mit Zitat antworten
  #5 (permalink)  
Alt 03-07-2010, 12:18
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Du hast immer noch nicht deinen Code angepasst.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #6 (permalink)  
Alt 03-07-2010, 12:23
SusiSorglos
 Registrierter Benutzer
Links : Onlinestatus : SusiSorglos ist offline
Registriert seit: May 2007
Ort: Farfaraway 02203
Beiträge: 71
SusiSorglos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

??? unverständnis....

Ich habe nun den Code auf die geforderten 100 Zeichen begrenztzt (hoffe ich).

Das mit dem PHP-Code verstehe ich nicht (oder will ich nicht verstehen)
Wenn ich den noch raus nehme, versteht doch keiner mehr den Code!?

Cu SusiSorglos
__________________
PHP 7.2, MySQL 5.7 auf U16.04
Mit Zitat antworten
  #7 (permalink)  
Alt 03-07-2010, 12:31
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von SusiSorglos Beitrag anzeigen
Wenn ich den noch raus nehme, versteht doch keiner mehr den Code!?
Das sagst du, aber ich versteh den auch so nicht. Wozu brauchst du das Anmeldedatum? Wieso liegt der Bereich den du ausgeben willst, im Zeitraum zwischen vor 2 Wochen und 2 Wochen in der Zukunft? Hast du dafür schon Daten? Warum nicht die letzten 4 Wochen oder den letzten Monat anzeigen? Deine Problembeschreibung ist also nicht so ganz nachvollziehbar.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 03-07-2010, 12:45
SusiSorglos
 Registrierter Benutzer
Links : Onlinestatus : SusiSorglos ist offline
Registriert seit: May 2007
Ort: Farfaraway 02203
Beiträge: 71
SusiSorglos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Finde ich schon..

Beispiel. Du hast einen DSL Vertrag abgeschlossen.. Der beginnt doch auch nicht immer am 01.01.2010. Sondern Du bekommst deine Rechnung doch sicherlich auch immer zu einem bestimmten Datum. Also am 03.07. und dann am 03.08 usw.usw. Und da ein Monat nicht immer gleich viele Tage hat, ist es zudem noch etwas schwer zu berechnen.
__________________
PHP 7.2, MySQL 5.7 auf U16.04
Mit Zitat antworten
  #9 (permalink)  
Alt 03-07-2010, 13:28
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Jetzt hab ich erstmal verstanden, was du meinst.

Ganz ohne PHP-Code, so in etwa?:

PHP-Code:
where `irgendwasbetween
    str_to_date
(concat_ws('-'year(curdate()), month(curdate()), day(`anmeldung`)), '%Y-%m-%d')
        + 
interval 0 day -- Überlaufkorrektur
        
interval if(day(curdate()) < day(`anmeldung`), 10month
    
and
    
str_to_date(concat_ws('-'year(curdate()), month(curdate()), day(`anmeldung`)), '%Y-%m-%d')
        + 
interval 0 day -- Überlaufkorrektur
        
interval if(day(curdate()) <= day(`anmeldung`), 01month 
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (03-07-2010 um 13:48 Uhr) Grund: Vergleichsoperatoren waren doch nicht falsch herum
Mit Zitat antworten
  #10 (permalink)  
Alt 03-07-2010, 13:32
derHund
 PHP Master
Links : Onlinestatus : derHund ist offline
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
derHund ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Jetzt wirds anschaulich, was du willst.

Du musst lediglich zum Anmeldedatum die Anzahl der seitdem vergangenen Monate addieren, dann hast du sowohl Unter- als auch Obergrenze. Etwas aufwendiger wird wohl die Berechnung der vergangenen Monate - ich kenne nur Funktionen zur Berechnung der vergangenen Tage, was aber auch genügt, da du daraus schätzen kannst, wieviel Monate es sind. Über ein paar einfache Vergleiche solltest du die Grenzen daraus leicht bestimmen können.

€: siehe Beitrag AmicaNoctis über mir
__________________
Die Zeit hat ihre Kinder längst gefressen: hund (back in black) | ??? | ??? | ...
Mit Zitat antworten
  #11 (permalink)  
Alt 03-07-2010, 13:40
SusiSorglos
 Registrierter Benutzer
Links : Onlinestatus : SusiSorglos ist offline
Registriert seit: May 2007
Ort: Farfaraway 02203
Beiträge: 71
SusiSorglos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen Dank soweit,

mal sehen ob ich es so umgesetzt bekomme das es dann auch richtig bei mir läuft. Verstehe den Code noch nicht so ganz und muss ihn erst mal anhand der Manu verstehen.

Ich konnte es zwischenzeitlich mit PHP perfekt lösen. Den Code poste ich hier nun nicht, weil wie wir gelernt haben, ist es ja PHP und kein SQL Code
Werde aber dennoch die SQL-Variante versuchen anzuwenden, aus lernzwecken

Cu SusiSorglos
__________________
PHP 7.2, MySQL 5.7 auf U16.04
Mit Zitat antworten
  #12 (permalink)  
Alt 03-07-2010, 13:47
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hab den Code nochmal korrigiert, die Vergleiche waren falsch herum.

Edit: nochmal korrigiert, sie waren doch richtig. Setzt mir doch die Hitze zu? *grübel*
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
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
Datum minus Datum, wieviele stunden ways PHP Developer Forum 4 22-04-2009 12:39
Tage zwischen Datum A und Datum B Daether PHP Developer Forum 12 23-08-2006 15:44
[JavaScript] [RegEx] us datum -> de datum JOat HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 1 23-05-2006 09:00
[SQL allgemein] Datum Query mit halbem Datum rainer1972 SQL / Datenbanken 7 11-10-2004 14:40
Datum ist kleiner als aktuelles Datum... Mr.Bremnskerl PHP Developer Forum 10 24-10-2003 13:20

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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:18 Uhr.