Gå til innhold

Oppdatere data i view hver dag


Anbefalte innlegg

Hei

 

Jeg har et view som ser ca. slik ut:

 

Dato, klokkeslett, taler og sanger på 10 neste møtene:
 
select dato as Dato, klokke as Klokkeslett, tm.motetype as Type, taler as Taler,sanger as Sanger
from hoved h
inner join typemote tm on h.type = tm.typeid
where h.dato >= DATE(NOW())
order by h.dato asc
limit 10
 
 
Dette henter data fra en tabell i mysql som heter oversikt.
I denne tabellen ligger alle møtene fremover. Dette viewet lister de neste 10 møtene.
Dette viewet lister opp dataene ut fra dagens dato.
Jeg viser dette i en tabell på en wordpresswebside til denne foreningen.
Det ser ut til at dette viewet ikke blir oppdatert i mysql uten at det legges inn, eller endres data i tabellen.
 
Hvordan får jeg dette viewet til å bli oppdatert hver dag, uten at det legges inn data i tabellen?
 
Hilsen Harald
Lenke til kommentar
Videoannonse
Annonse
  • 2 år senere...

Hei

 

Jeg fant ut at jeg kunne endre php.ini på serveren, slik at den ble stilt inn på vår tidssone. Da fungerer det bra.

Et annet problem jeg har er at når jeg har to møter på samme dag, f.eks 17:00 og 19:00, ønsker jeg at når klokka blir mer enn 17:00 så skal det møtet forsvinne fra lista. Hvordan filtrerer jeg meg frem til det? Har sett at det går an å kombinere to kolonner (date og time) til en datetime kolonne. Er løsningen å gjøre dette, og så filtrere med NOW?

Lenke til kommentar

Har sett at det går an å kombinere to kolonner (date og time) til en datetime kolonne. Er løsningen å gjøre dette, og så filtrere med NOW?

Det er ikke nødvendig å ha to kolonner som er DATE og TIME hver for seg, er nok med en DATETIME kolonne. Så er det bare å formatere (se DATE_FORMAT(), DATE(), MONTH(), YEAR() osv) den i forhold til om du kun vil ha date, time eller begge deler.

Du kan fint sjekke mot NOW(), f.eks. (kolonneX er en DATETIME)

WHERE `kolonneX` > NOW()
vil ignorerer alle rader som er eldre enn nå. Vil du sjekke på kun dato kan du f.eks. gjøre

WHERE DATE(`kolonneX`) > DATE(NOW())
Endret av Crowly
Lenke til kommentar

 

Har sett at det går an å kombinere to kolonner (date og time) til en datetime kolonne. Er løsningen å gjøre dette, og så filtrere med NOW?

Det er ikke nødvendig å ha to kolonner som er DATE og TIME hver for seg, er nok med en DATETIME kolonne. Så er det bare å formatere (se DATE_FORMAT(), DATE(), MONTH(), YEAR() osv) den i forhold til om du kun vil ha date, time eller begge deler.

Du kan fint sjekke mot NOW(), f.eks. (kolonneX er en DATETIME)

WHERE `kolonneX` > NOW()
vil ignorerer alle rader som er eldre enn nå. Vil du sjekke på kun dato kan du f.eks. gjøre

WHERE DATE(`kolonneX`) > DATE(NOW())

Jeg har to eksisterende kolonner hvor jeg bruker en GUI på en nettside for å administrere dette.

Dette fungerer bra og brukerne er fornøyd, så jeg ønsker ikke å endre dette.

Her legges det inn Dato i en kolonne og klokkeslett i neste. Jeg ønsker å fortsette med denne løsningen.

Jeg ønsker å bruke dataene fra tabellen videre på en annen side for å lage en infoskjerm som viser arrangementer.

Problemet mitt er at hvis jeg filterer på dato, vil det kun bli oppdaert ved datoskifte, mens jeg ønsker å filtrere etter tid også.

Er det da mulig å legge inn en kalkulert kolonne som kombinerer dato og klokke til en datetime kolonne i mysql? 

Lenke til kommentar

F.eks.

WHERE CONCAT(dato, ' ', tid) > NOW()
Selv om det i GUI er ett felt for dato og ett felt for tid, så behøver du ikke ha det slik i databasen. Er bedre å ha en datetime kolonne, og så formaterer du denne etter behov på output, og slå sammen dato og tid når du oppretter en ny rad eller oppdaterer en eksisterende. Med php gjør du noe ala dette:

 

// ut

// $result->startTime er fra en database spørring, tar ikke med all kode her
$start = new DateTime($result->startTime);

echo '<input type="text" name="dato" value="' . $start->format('d.m.Y') . '"/>';
echo '<input type="text" name="tid" value="' . $start->format('H:i') . '"/>';

// inn
$date = filter_input(INPUT_POST, 'dato', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
$time = filter_input(INPUT_POST, 'tid', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);

$dateTime = new DateTime($date . ' ' . $time);

// ikke komplett kode for mysqli
$statement = $mysqli->prepare("UPDATE tabell SET start = ? WHERE ....";
$statement->bind_param("s", $dateTime->format('Y-m-d H:i:s');
$statement->execute();
Lenke til kommentar

Jeg bruker en GUI som heter Dadabik, og denne fungerer bra som admin tabell.

 

Jeg prøver å lage en webside som viser en tabell med kommende arrangementer uavhengig av denne admin GUI en

 

Jeg prøvde følgende spørring i Mysql:

 

select STR_TO_DATE(CONCAT(dato, ' ', klokke), '%Y-%m-%d %H:%i:%s') as datotid from hoved
WHERE datotid >= DATE( DATE_ADD( NOW(), INTERVAL 8 HOUR ))
 
Problemet er at den ikke kjenner igjen datotid som en kolonne.
Lenke til kommentar

Du kan ikke bruke datotid i where delen, den finnes ikke enda, kun faktiske tabell felt.

SELECT STR_TO_DATE(CONCAT(dato, ' ', klokke), '%Y-%m-%d %H:%i:%s') as datotid FROM hoved
WHERE STR_TO_DATE(CONCAT(dato, ' ', klokke), '%Y-%m-%d') >= DATE( DATE_ADD( NOW(), INTERVAL 8 HOUR ))
Her ser man fordelen med å ha det lagret i ett DateTime felt i stedet for slik du har det nå, da hadde du kommet unna med

SELECT datotid FROM hoved
WHERE DATE(datotid) >= DATE( DATE_ADD( NOW(), INTERVAL 8 HOUR ))
Endret av Crowly
Lenke til kommentar

Du kan ikke bruke datotid i where delen, den finnes ikke enda, kun faktiske tabell felt.

SELECT STR_TO_DATE(CONCAT(dato, ' ', klokke), '%Y-%m-%d %H:%i:%s') as datotid FROM hoved
WHERE STR_TO_DATE(CONCAT(dato, ' ', klokke), '%Y-%m-%d') >= DATE( DATE_ADD( NOW(), INTERVAL 8 HOUR ))
Her ser man fordelen med å ha det lagret i ett DateTime felt i stedet for slik du har det nå, da hadde du kommet unna med

SELECT datotid FROM hoved
WHERE DATE(datotid) >= DATE( DATE_ADD( NOW(), INTERVAL 8 HOUR ))

Jeg gjorde en test nå, men jeg får det ikke helt til.

Jeg har en kolonne "datotid", som er et datetime felt. og prøvde denne spørringen:

 

SELECT datotid FROM hoved

WHERE DATE(datotid) >= DATE( DATE_ADD( NOW(), INTERVAL 8 HOUR ))

 

Jeg har flere møter på samme dato i tabellen, kl 9 kl 12 og kl 15, men når klokken er 11 her, tar den også med seg møtet som er klokken 9 i denne spørringen.

Det virker som den ikke tar hensyn til klokkeslettet, men kun datoen. Noen tips? 

Lenke til kommentar

Det virker som den ikke tar hensyn til klokkeslettet, men kun datoen. Noen tips?

Ja, du ber den kun å sammenligne på kun dato med DATE()

 

Hvis datotid = 2017-11-10 11:15:00 og NOW() + 8 timer = 2017-11-10 20:00:00 så blir sql'en sendende slikt ut

DATE(datotid) >= DATE( DATE_ADD( NOW(), INTERVAL 8 HOUR ))
-- 2017-11-10 00:00:00 >= 2017-11-10 00:00:00
DATE() er en nyttig funksjon, men ikke her.
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...