Velden dupliceren
Dat kan je zelf aanpassen naar wat het moet zijn.
Code (php)
1
2
3
4
2
3
4
VALUES
('xxx', '$datum')";
for ($i=1; $i<$tijd; $i++) {
$SQL .= (",\r\n\t('id', '$datum' + INTERVAL " . $i . " WEEK)");
('xxx', '$datum')";
for ($i=1; $i<$tijd; $i++) {
$SQL .= (",\r\n\t('id', '$datum' + INTERVAL " . $i . " WEEK)");
Maar krijg deze alleen bij de eerst aangemaakte rij
de andere 4 rijen die aangemaakt worden krijgen de waarde id in de kolom fn
Gewijzigd op 11/06/2015 23:48:12 door Pierre Web
Verander id in deze regel:
$SQL .= (",\r\n\t('id', '$datum' + INTERVAL " . $i . " WEEK)");
Kijken of ik nog ergens tegen aanloop.
Alvast hartelijk dank.
Toevoeging op 12/06/2015 11:53:26:
Hallo,
Mooi om te zien wat allemaal mogelijk is.
Wat zou no de schrijfwijze zijn als ik een interval wil van bijv. om de 2 weken of dagen (DAY)
Code (php)
1
2
2
for ($i=1; $i<$periode; $i++) {
$SQL .= (",\r\n\t('$fn', '$datum' + INTERVAL " . $i . " +2 WEEK)");
$SQL .= (",\r\n\t('$fn', '$datum' + INTERVAL " . $i . " +2 WEEK)");
Verder,
Nou word de einddatum bepaald door begin datum , periode en de loop.
Is het ook mogelijk een einddatum als eind in te stellen.
Dus voeg vanaf bijv. 2015-06-12 een rij om de week in t/m 1 september
Gewijzigd op 12/06/2015 03:22:59 door Pierre Web
Hier kan je natuurlijk van alles mee doen.
'$datum' + INTERVAL " . $i . " DAY // dag verder
'$datum' + INTERVAL " . ($i*3) . " WEEK // 3 weken verder
'$datum' - INTERVAL " . ($i*2) . " MONTH // 2 maanden terug
etc.
Toevoeging op 12/06/2015 17:54:16:
Ik voeg als voorbeeld een veld comments toe.
Zo gauw ik een veld toevoeg gaat het mis, datums kloppen niet meer enz.
Is nog een Select toegevoegd voor ophalen data, maar daar ligt het niet aan.(1e veld hieronder)
Is er misschien een bepaalde volgorde nodig?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$res = $MySQLiconn->query("SELECT * FROM data WHERE id = $id ");
while($row=$res->fetch_array())
{
$datum = $row['fromDate'];
$title = $row['title'];
$comments = $row['comments'];
}
while($row=$res->fetch_array())
{
$datum = $row['fromDate'];
$title = $row['title'];
$comments = $row['comments'];
}
Code (php)
1
2
3
4
5
2
3
4
5
$SQL = "INSERT INTO data (title, datum , comments)
VALUES
('$title', '$datum' , '$comments')";
for ($i=1; $i<4; $i++) {
$SQL .= (",\r\n\t('$title','$datum', '$comments' + INTERVAL " . ($i*4) . " WEEK)");
VALUES
('$title', '$datum' , '$comments')";
for ($i=1; $i<4; $i++) {
$SQL .= (",\r\n\t('$title','$datum', '$comments' + INTERVAL " . ($i*4) . " WEEK)");
Gewijzigd op 12/06/2015 19:47:32 door Pierre Web
Maar geld dit dan ook niet voor title?
En nee dat geldt niet voor $title.
Je hebt 3 velden voor je insert en die zijn gescheiden door komma's tussen 1 en 2 en 2 en 3.
1. = $title
2. = $datum + INTERVAL funktie
3. = $comments
maar ik blijf het ook soms moeilijk vinden.
Is een verkorte schrijfwijze voor
DATE_ADD is dus een functie om met datums te werken, niet met strings (tenzij het een geldige datum string is)
Maar waarom ben je eigenlijk steeds allerlei gegevens aan het dupliceren?
Ben een soort kalender aan het maken op de 1e plaats om van te leren.
Nou heb ik bijv. elke zaterdag evenement x, op deze manier vul ik dus de tabel.
13-6 x
20-6 x
enz
In de praktijk kan er op zaterdag ook iets anders zijn , dat pas ik dan aan
Met Current Month haal ik alles op
Er zullen wel andere manieren zijn
als het zaterdag is haal (dat van zaterdag) op
als het zaterdag 20 juni is haal wat anders op.
alleen raak ik dan data uit het verleden kwijt omdat er na de dag en niet naar datum wordt gekeken.
Er zullen wel heel wat manieren zijn...
Ik had eerst een hele constructie met php gemaakt voor het invoegen
this week
this week en 1
enz
Maar dit werd wel erg uitgebreid en onoverzichtelijk, al heb ik er veel van geleerd.
Gewijzigd op 13/06/2015 13:52:45 door Pierre Web
Code (php)
1
2
3
4
2
3
4
$datum =2016-06-06;
rij
$SQL .= (",\r\n\t('$title','$datum', '$comments' + INTERVAL " . ($i*4) . " WEEK)");
rij
$SQL .= (",\r\n\t('$title','$datum', '$comments' + INTERVAL " . ($i*4) . " WEEK)");
Is er ook een manier om bijv. van een willekeurige datum in te voegen/kopie:
bijvoorbeeld:kopieer geselecteerde naar 2e maandag van de volgende maand.
Nog niet een oplossing gevonden bijv.
http://www.gizmola.com/blog/archives/99-Finding-Next-Monday-using-MySQL-Dates.html
Gewijzigd op 17/06/2015 21:34:18 door Pierre Web
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DELIMITER $$
CREATE FUNCTION get_nth_day_of_month(adate DATE, dayno TINYINT, nth TINYINT)
RETURNS DATE
BEGIN
DECLARE first_day, nth_day DATE;
DECLARE add_days, first_day_no TINYINT;
/* eerste dag van de maand */
SET first_day = STR_TO_DATE(CONCAT(YEAR(adate), '-', MONTH(adate), '-01'), '%Y-%m-%d');
/* dagnummer eerste dag van de maand */
SET first_day_no = DAYOFWEEK(first_day);
SET add_days = (nth - 1) * 7 + dayno - first_day_no;
IF first_day_no > dayno THEN
SET add_days = add_days + 7;
END IF;
SET nth_day = first_day + INTERVAL add_days DAY;
RETURN nth_day;
END$$
DELIMITER ;
CREATE FUNCTION get_nth_day_of_month(adate DATE, dayno TINYINT, nth TINYINT)
RETURNS DATE
BEGIN
DECLARE first_day, nth_day DATE;
DECLARE add_days, first_day_no TINYINT;
/* eerste dag van de maand */
SET first_day = STR_TO_DATE(CONCAT(YEAR(adate), '-', MONTH(adate), '-01'), '%Y-%m-%d');
/* dagnummer eerste dag van de maand */
SET first_day_no = DAYOFWEEK(first_day);
SET add_days = (nth - 1) * 7 + dayno - first_day_no;
IF first_day_no > dayno THEN
SET add_days = add_days + 7;
END IF;
SET nth_day = first_day + INTERVAL add_days DAY;
RETURN nth_day;
END$$
DELIMITER ;
Dit zou ook nog wel in een query te verwezenlijken zijn, maar dan wordt het een stuk lastiger.
Heb je het alleen maar nodig voor een insert kan je dit net zo makkelijk binnen PHP oplossen.
Bedankt voor je bericht, ik heb het alleen voor een insert nodig en ik neem aan dat je met php bedoeld dat ik
eerst de datum van bijv. 2e maandag van de volgende maand bereken vanaf de gegeven datum.
Met iets als PHP strtotime() Function
Gewijzigd op 20/06/2015 17:50:09 door Pierre Web