krijg geen result uit database
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$trainToday = date("d-m-Y");
$trainEndDate = date('d-m-Y', strtotime($trainToday. ' + 12 weeks')); // or 4 days i.e.
$trainingTeamLid = "X12-1";
$sqltrainingLidDates = "SELECT datum FROM celeritas_aanwezigheid WHERE (datum BETWEEN '$trainToday' AND '$trainEndDate') AND team = '$trainingTeamLid' ORDER BY STR_TO_DATE(datum, '%d-%m-%Y') ASC LIMIT 8";
$resulttrainingLidDates = $db->query($sqltrainingLidDates);
$trainEndDate = date('d-m-Y', strtotime($trainToday. ' + 12 weeks')); // or 4 days i.e.
$trainingTeamLid = "X12-1";
$sqltrainingLidDates = "SELECT datum FROM celeritas_aanwezigheid WHERE (datum BETWEEN '$trainToday' AND '$trainEndDate') AND team = '$trainingTeamLid' ORDER BY STR_TO_DATE(datum, '%d-%m-%Y') ASC LIMIT 8";
$resulttrainingLidDates = $db->query($sqltrainingLidDates);
datum in tabel:
datum veld staat op varchar (express omdat het eventueel ook ander formaat en tekst zou kunnen zijn.
en ook in notatie dd-mm-yyyy
Graag ontvang ik geen commentaar op waarom ik het op varchar heb staan en een ander format dan yyyy-mm-dd
maar alleen hulp hoe ik toch alles tussen vandaag en 12 week verder met een limiet van 8 records kan krijgen.
Nu heb ik een empty result (getest in phpmyadmin)
Toevoeging op 30/04/2022 12:34:25:
stel ik voer de volgende regel uit:
Code (php)
1
SELECT datum FROM celeritas_aanwezigheid WHERE (datum BETWEEN '01-01-2022' AND '22-04-2022') AND team = 'X12-1' ORDER BY STR_TO_DATE(datum, '%d-%m-%Y') ASC LIMIT 8
dan is mijn resultaat:
Dit omdat team hier X12-1 is, hij zoekt dus niet op datum..
Christiaan de kleine op 30/04/2022 12:30:41:
datum veld staat op varchar (express omdat het eventueel ook ander formaat en tekst zou kunnen zijn.
en ook in notatie dd-mm-yyyy
Graag ontvang ik geen commentaar op waarom ik het op varchar heb staan en een ander format dan yyyy-mm-dd
maar alleen hulp hoe ik toch alles tussen vandaag en 12 week verder met een limiet van 8 records kan krijgen.
datum veld staat op varchar (express omdat het eventueel ook ander formaat en tekst zou kunnen zijn.
en ook in notatie dd-mm-yyyy
Graag ontvang ik geen commentaar op waarom ik het op varchar heb staan en een ander format dan yyyy-mm-dd
maar alleen hulp hoe ik toch alles tussen vandaag en 12 week verder met een limiet van 8 records kan krijgen.
Maar waarom zou je dat dan niet aanpassen? Waarom zou je de moeilijke weg willen bewandelen in plaats van de makkelijke weg met standaard functies.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT datum
FROM celeritas_aanwezigheid
WHERE STR_TO_DATE(datum, '%d-%m-%Y') BETWEEN '2022-01-01' AND '2022-04-22'
AND team = 'X12-1'
ORDER BY STR_TO_DATE(datum, '%d-%m-%Y') ASC
LIMIT 8
FROM celeritas_aanwezigheid
WHERE STR_TO_DATE(datum, '%d-%m-%Y') BETWEEN '2022-01-01' AND '2022-04-22'
AND team = 'X12-1'
ORDER BY STR_TO_DATE(datum, '%d-%m-%Y') ASC
LIMIT 8
Tip: sla dingen als datums altijd op in het format waarmee je DB het makkelijkst om kan gaan. Het formatteren van datums naar alle mogelijke variaties/talen kan door zowel je DB als PHP heel makkelijk gedaan worden.
Gewijzigd op 30/04/2022 15:21:12 door Jan Koehoorn
SELECT DATE_FORMAT(date, \"%d-%m-%Y\") AS formatted_date FROM test WHERE date >= NOW() ORDER BY formatted_date ASC LIMIT 8
2022-04-30
2022-05-01
2022-04-15
als ik bovenstaande code run, krijg ik maar 1 record te zien ipv 2...
heb namelijk voor mijn output toch echt dd-mm-yyyy nodig, dus vandaar die verplichte DATE_FORMAT(date, \"%d-%m-%Y\") AS formatted_date
Gewijzigd op 30/04/2022 15:30:35 door christiaan de kleine
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DROP TABLE IF EXISTS celeste;
CREATE TABLE celeste (
id int(11) NOT NULL AUTO_INCREMENT,
datum date NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO celeste (id, datum) VALUES
(1, '2022-05-03'),
(2, '2022-04-30'),
(3, '2022-05-01'),
(4, '2022-04-15'),
(5, '2022-06-02');
SELECT id, datum FROM celeste;
SELECT id, datum FROM celeste WHERE datum >= NOW();
SELECT id, datum, DATE_FORMAT(datum, "%d-%m-%Y") AS formatted_date FROM celeste WHERE datum >= NOW() ORDER BY formatted_date ASC;
SELECT id, datum, DATE_FORMAT(datum, "%d-%m-%Y") AS formatted_date FROM celeste WHERE datum >= NOW() ORDER BY datum ASC;
SELECT id, datum, DATE_FORMAT(datum, "%d-%m-%Y") AS formatted_date FROM celeste WHERE STR_TO_DATE(datum, '%Y-%m-%d') BETWEEN '2022-01-01' AND '2022-04-22' ORDER BY datum ASC;
CREATE TABLE celeste (
id int(11) NOT NULL AUTO_INCREMENT,
datum date NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO celeste (id, datum) VALUES
(1, '2022-05-03'),
(2, '2022-04-30'),
(3, '2022-05-01'),
(4, '2022-04-15'),
(5, '2022-06-02');
SELECT id, datum FROM celeste;
SELECT id, datum FROM celeste WHERE datum >= NOW();
SELECT id, datum, DATE_FORMAT(datum, "%d-%m-%Y") AS formatted_date FROM celeste WHERE datum >= NOW() ORDER BY formatted_date ASC;
SELECT id, datum, DATE_FORMAT(datum, "%d-%m-%Y") AS formatted_date FROM celeste WHERE datum >= NOW() ORDER BY datum ASC;
SELECT id, datum, DATE_FORMAT(datum, "%d-%m-%Y") AS formatted_date FROM celeste WHERE STR_TO_DATE(datum, '%Y-%m-%d') BETWEEN '2022-01-01' AND '2022-04-22' ORDER BY datum ASC;
Merk op dat bij sorteren met formatted_date en datum de volgorde anders is.
Gewijzigd op 30/04/2022 18:47:36 door Adoptive Solution
Gewijzigd op 30/04/2022 19:11:45 door Jan Koehoorn
Christiaan de kleine op 30/04/2022 12:30:41:
datum veld staat op varchar (express omdat het eventueel ook ander formaat en tekst zou kunnen zijn.
en ook in notatie dd-mm-yyyy
datum veld staat op varchar (express omdat het eventueel ook ander formaat en tekst zou kunnen zijn.
en ook in notatie dd-mm-yyyy
Wat voor formaten nog meer dan?
Als je dit in plaats van 2022-04-30 als 30 april 2022 of als 'vandaag' opslaat, PHP kan er dan weinig chocolade van maken om mee te rekenen. Bovendien zijn zulke formats en relatieve momenten (vandaag) echt iets voor in de view, en niet voor in de opslag.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
De php code:
$SupdateAanwezigheid1 = "UPDATE aanwezigheid SET '$DBfieldNameStatus' = '$lidStatus1' WHERE datum = '$newLidDate1' AND '$DBfieldName' = '$name' AND team = '$fieldTeam'";
De error melding:
Error: UPDATE aanwezigheid SET 'speler3Status' = 'yes' WHERE datum = '2022-05-02' AND 'speler3' = 'Christiaan*de Kleine' AND team = 'X12-1'
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''speler3Status' = 'yes' WHERE datum = '2022-05-02' AND 'speler3' = 'Christiaa...' at line 1
$SupdateAanwezigheid1 = "UPDATE aanwezigheid SET '$DBfieldNameStatus' = '$lidStatus1' WHERE datum = '$newLidDate1' AND '$DBfieldName' = '$name' AND team = '$fieldTeam'";
De error melding:
Error: UPDATE aanwezigheid SET 'speler3Status' = 'yes' WHERE datum = '2022-05-02' AND 'speler3' = 'Christiaan*de Kleine' AND team = 'X12-1'
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''speler3Status' = 'yes' WHERE datum = '2022-05-02' AND 'speler3' = 'Christiaa...' at line 1
Zal vast een lullige tikfout zijn, maar zie hem zo niet
Gewijzigd op 01/05/2022 10:09:27 door christiaan de kleine
- Ariën - op 01/05/2022 10:43:00:
speler3Status is een veld, dus die hoort niet tussen quotes.
Waarom gebruik je niet een 0 of 1 i.p.v. 'yes'?
Waarom gebruik je niet een 0 of 1 i.p.v. 'yes'?
check, quotes weggehaald en idd werkend.
Waarom ik yes gebruik is omdat ik vanuit mijn eigen android applicatie de waardes in heb gesteld op yes, no en maybe. Dit omdat ik de knoptexten zo heb staan zodat de gebruiker zijn aanwezigheid kan aanpassen. en gezien ik daar de makkelijke route gekozen heb is de tekst die hij verzend in mijn get de tekst van de button in de applicatie.
Had je mijn query nou uitgeprobeerd, of ben je van het type dat geen "dankjewel" zegt als ze geholpen worden?
Jan Koehoorn op 02/05/2022 13:30:31:
Had je mijn query nou uitgeprobeerd, of ben je van het type dat geen "dankjewel" zegt als ze geholpen worden?
Ik had hem nog niet geprobeerd Jan. Ik ben dagelijks gexig met mijn normale werk en savonds nog kort met de Android applicatie.
Ga kijken of hey vanavond lukt
Christiaan de kleine op 02/05/2022 15:43:30:
Ik had hem nog niet geprobeerd Jan ... Ga kijken of hey vanavond lukt
En, is het gelukt?