Gewusst wie: Auffüllen einer Tabelle mit einem Datumsbereich?
Brauche ich eine MySQL-Tabelle zu halten, ALLE TERMINE zwischen 2011-01-01-und 2011-12-31. Ich habe eine Tabelle erstellt mit einer Spalte Namen "_date", geben Sie DATUM.
Mit welcher Abfrage kann ich das füllen der Tabelle mit allen benötigten Daten (anstatt geben Sie Ihnen mit der hand)?
und Sie sind mit nur
danke!!! 🙂 (und von Ihnen positiv bewertet werden)
Und um Ihre Frage zu beantworten, ich habe Zugriff auf PHP, aber (ich) würde nicht wirklich wissen, wie man schnell zu berechnen, werden alle Daten innerhalb des Bereichs in PHP und (ii) ich denke, MySQL tun könnten weit effizienter?
Wenn Sie wissen ebenso gut, es ist wirklich nicht einfacher in PHP. Und es ist viel effizienter, es zu tun in MySQL.
mysql
? nichts wie php etc.?danke!!! 🙂 (und von Ihnen positiv bewertet werden)
Und um Ihre Frage zu beantworten, ich habe Zugriff auf PHP, aber (ich) würde nicht wirklich wissen, wie man schnell zu berechnen, werden alle Daten innerhalb des Bereichs in PHP und (ii) ich denke, MySQL tun könnten weit effizienter?
Wenn Sie wissen ebenso gut, es ist wirklich nicht einfacher in PHP. Und es ist viel effizienter, es zu tun in MySQL.
InformationsquelleAutor Pr0no | 2012-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Hier ist der SQL Fiddle zu spielen: http://sqlfiddle.com/#!2/65d13/1
BEARBEITEN (um zu prüfen ob Datum schon vorhanden ist) wie gebeten, durch Andrew Fox.
Hier ist der SQL Fiddle zu spielen: http://sqlfiddle.com/#!2/66f86/1
alter routine command denied to user 'name'@'localhost' for routine 'name.filldates': DROP PROCEDURE IF EXISTS filldates
Ein anderer Fehler, diesmal:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER | CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE) BEGIN WHI' at line 1: DELIMITER | CREATE PROCEDURE filldates(dateStart DATE, dateEnd DATE) BEGIN WHILE dateStart <= dateEnd
Ja, sir. Aber dieses mal habe ich versucht, mit remote-Zugriff.
Für diejenigen, die immer syntax Fehler. Wenn Sie die Verbindung zu Ihrer Datenbank über die MySQL-Workbench und führen Sie die create procedure-Skript erhalten Sie syntax-Fehler. Um dieses Skript ausführen, Rechtsklick auf das "Gespeicherte Prozeduren" - Menü und wählen Sie "Erstellen Sie die Gespeicherte Prozedur" fügen Sie dann die create procedure-Skript, entfernen Sie die "//" am Ende des Skripts, und drücken Sie "Anwenden". Es funktionierte für mich.
Wana geben Sie die Punktzahl verdoppeln!
InformationsquelleAutor Leniel Maccaferri
Ich nicht möchte, dass meine SQL-Abfrage benötigen externe Abhängigkeiten (brauchen noch einen Kalender-Tabelle, Verfahren zum laden von Daten in eine temporäre Tabelle mit Daten usw.) Die ursprüngliche Idee für diese Abfrage kam aus http://jeffgarretson.wordpress.com/2012/05/04/generating-a-range-of-dates-in-mysql/, die ich hatte, etwas optimiert für Klarheit und Benutzerfreundlichkeit.
Ist es einfach zu optimieren und skalieren Sie diese Tabelle für andere Verwendungen. Sie können leicht loszuwerden, die Dutzende und Hunderte Tische, wenn Sie brauchen nur die Daten einer Woche.
Wenn Sie eine größere Menge von zahlen, es ist einfach zu fügen Sie eine Tausende Tisch. Sie müssen nur kopieren und einfügen der Tabelle mit Hunderten und fügen Sie eine null auf 9 zahlen.
Sehr clever. Wenn jemand sich zu Fragen: c-Tabelle erzeugt durch die innere select-die Summe zwischen 0-9, 10-90, 100-900, das ist ein großes Intervall mit den zahlen von 0 bis 999 (1000 zahlen insgesamt). Äußere select-Auswahl eine Liste von zahlen von 0 bis 364 (dh 365 Tage) und wählen Sie alle Termine eines Jahres bis heute (CURDATE).
InformationsquelleAutor IvanD
Fand ich diese paste-and-go-Variante arbeiten:
InformationsquelleAutor Zon
wenn Sie in einer situation, wie ich wo Verfahren sind verboten, und der sql Benutzer nicht über die Berechtigungen zum einfügen, daher einfügen nicht erlaubt, aber Sie wollen erzeugen einer Liste von Daten in einem bestimmten Zeitraum, sagen wir im Laufenden Jahr einige aggregation, verwenden Sie diese
Dies ist freaking awesome
InformationsquelleAutor computingfreak
Wenn Sie eine Tabelle mit einem ausreichend großen zusammenhängenden Satz von ids, die Sie nutzen könnten -
Hinweis: beachten Sie jedoch, dass dies könnte Sie in Schwierigkeiten bei Schaltjahren (366 Tage)
InformationsquelleAutor nnichols
Dank IvanD.
Ich habe eine bessere Lösung, die ermöglicht Ihnen das erstellen einer speziellen Kalender-Tabelle.
Zum Beispiel, wenn ich versucht bin, um eine Tabelle 2014-04, sieht es wie folgt aus:
table of 2014-04
, aber die Tabelle mit bereits vergangen, Tage im gewählten Monat und in Aktuelles Jahr!InformationsquelleAutor Zhili Yin
Dies kann erreicht werden in PHP durch die Verwendung einer einfachen for-Schleife. Es gibt ein paar Möglichkeiten, es zu tun. Eine Möglichkeit wäre, an Stelle der ursprünglichen Datum in eine variable und die Schleife durch Sie laufen jeden Tag durch das hinzufügen von +1 Tag für jede einzelne Schleife, zum Beispiel, beginnen Sie auf 01/01/2011 und dann die Schleife hinzufügen 0 die erste Zeit, 1 Tag, am nächsten, gefolgt von 2 Tagen so weiter und so weiter, um die $i variable. Sie können dann drucken Sie die Tage oder fügen Sie Sie zu Ihrer Datenbank. In diesem Fall $i darstellen würde der Zähler mit 0 als Ausgangspunkt, <=365 ist, wie viele loops, die Sie wollen, um durch zu gehen, die gleich oder kleiner als die Anzahl der Tage und $i++ fügt +1 zu der Variablen "$i " auf jeder Schleife.
date('Y-m-d' konvertiert das Datum in yyyy-mm-dd. Mit einem Kapital Y gibt Ihnen einen vollständigen 4-stelligen Jahr, während mit einem Kleinbuchstaben y geben Sie die letzten 2 Ziffern des Jahres. Sie möchten, halten Sie es in dieser Reihenfolge zu fügen Sie es in ein Datum-Feld in mySQL.
strtotime($originalDate analysiert das Datum in einen Unix-Zeitstempel und die ."+".$ich." Tag") grundsätzlich fügt den Wert von $i in Tagen bis zu dem Datum.
Endlich gibt es die mysqli-query. $db stellt die Verbindung zur Datenbank Variablen, diese müssen geändert werden, um beliebige variable, die Sie für die Verbindung ein. Dies ist gefolgt von der eigentlichen Abfrage. Austausch nur die word-Tabelle für die Tabelle name und das Datum, vor-WERTE, die Sie date-Zeile name und Sie sind bereit zu gehen.
Der folgenden ist ein Beispiel:
Einen anderen Weg um dies zu erreichen verwenden die für die Funktion wäre, die strtotime Termine direkt in die für Aktionen als Widerstand gegen die Zähler-Variablen, welche eine noch kürzere Stück code. Ersetzen $i=0 (der erste counter point) mit dem Start-Tag zeigen, Folgen, dass mit der weniger als oder gleich der end-Tag zeigen (die Anzahl der Schleifen) dann endlich mit Ihrem plus +1, um die erste Anweisung in eine variable bereit für den Einsatz.
Schließlich, konvertieren Sie das Datum in Y-m-d-format bereit gestellt werden in die Datenbank und die Abfrage ausführen.
Wieder, wie mit dem ersten Beispiel, diese können ausgedruckt oder direkt in Ihre Datenbank.
Der folgenden ist ein Beispiel:
Habe ich wohl gemacht, es klingt verwirrender als es ist, aber hoffe, es wird zumindest geben Sie eine Idee, wie es funktioniert.
Tut uns Leid, es war meine erste jemals post. Ich habe bearbeitet die Antwort auf eine Beschreibung. Ich habe auch geantwortet, auf die andere, die wollte nur hinzufügen, Montag bis Freitag im gesamten Jahr in einem anderen post. Ich denke, man kann feststellen, dass in meinem Profil...
InformationsquelleAutor independent.guru
Ich hatte vor kurzem die Notwendigkeit der Schaffung eines
calendar_date
Tabelle wie unten:Ich dann bevölkerte Sie mit allen möglichen Daten zwischen
January 1, 2001
undDecember 31, 2100
(beide inclusive) mit der Abfrage unter:Auf meine lokale MySQL-Datenbank, die
INSERT
Abfrage dauerte nur ein paar Sekunden. Hoffe, das jemand hilft.InformationsquelleAutor manish
Inspiriert von IvanD große Anzahl join komme ich zu dieser:
InformationsquelleAutor ilgoom
InformationsquelleAutor Dmytro L