krijg geen result uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Christiaan de kleine

christiaan de kleine

30/04/2022 12:30:41
Quote Anchor link
Hallo allemaal, ik probeer met onderstaande code een field terug te krijgen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);


datum in tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
07-04-2022
14-04-2022
21-04-2022
05-05-2022
19-05-2022
21-05-2022


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)
PHP script in nieuw venster Selecteer het PHP script
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
07-04-2022
14-04-2022
21-04-2022
05-05-2022
19-05-2022


Dit omdat team hier X12-1 is, hij zoekt dus niet op datum..
 
PHP hulp

PHP hulp

27/06/2022 16:56:32
 
- Ariën  -
Beheerder

- Ariën -

30/04/2022 14:10:03
Quote Anchor link
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.

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.
 
Jan Koehoorn

Jan Koehoorn

30/04/2022 15:20:50
Quote Anchor link
Het kan wel, maar door je opzet wordt het een stuk ingewikkelder.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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
 
Christiaan de kleine

christiaan de kleine

30/04/2022 15:29:18
Quote Anchor link
test table gemaakt, met date als date en 3 rijen

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
 
Adoptive Solution

Adoptive Solution

30/04/2022 18:47:15
Quote Anchor link
Voor wie het wil proberen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;


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
 
Jan Koehoorn

Jan Koehoorn

30/04/2022 19:11:11
Quote Anchor link
Die voorbeeld-query van mij werkt, probeer maar.
Gewijzigd op 30/04/2022 19:11:45 door Jan Koehoorn
 
- Ariën  -
Beheerder

- Ariën -

30/04/2022 23:20:46
Quote Anchor link
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


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.
 
Christiaan de kleine

christiaan de kleine

01/05/2022 10:08:50
Quote Anchor link
Oke, ik krijg nu nog een error, kan hem niet thuis brengen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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  -
Beheerder

- Ariën -

01/05/2022 10:43:00
Quote Anchor link
speler3Status is een veld, dus die hoort niet tussen quotes.

Waarom gebruik je niet een 0 of 1 i.p.v. 'yes'?
Gewijzigd op 01/05/2022 10:43:54 door - Ariën -
 
Christiaan de kleine

christiaan de kleine

01/05/2022 12:14:01
Quote Anchor link
- 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'?


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.
 
Jan Koehoorn

Jan Koehoorn

02/05/2022 13:30:31
Quote Anchor link
Had je mijn query nou uitgeprobeerd, of ben je van het type dat geen "dankjewel" zegt als ze geholpen worden?
 
Christiaan de kleine

christiaan de kleine

02/05/2022 15:43:30
Quote Anchor link
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
 
Ozzie PHP

Ozzie PHP

04/05/2022 11:38:10
Quote Anchor link
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?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.