Just nu i M3-nätverket
Gå till innehåll

Räkna ut antalet dagar mellan 2 datum


Poj

Rekommendera Poster

Hej. Jag försöker räkna ut antalet dagar mellan 2 datum i en databas tabell.

 

Jag har försökt följande

 

 
<?php $date=$row_Recordset4['MAX(datum)']-$row_Recordset4['startdatum'];?>
<?php echo $date; ?>

 

startdatum ser ut så här 2008-11-01 och datum ser ut så här 2008-11-09 20:14:14 .

Jag vill veta hur många dagar som skiljer mellan datumen, hur gör man?

 

Länk till kommentar
Dela på andra webbplatser

en tanke...

 

konvertera datumet till unixtid...

tid2 - tid1 = skillnad i sekunder / 60 / 60 / 24 = skillnad i dagar.

 

 

 

Länk till kommentar
Dela på andra webbplatser

Kan jag ersätta datumen ($days = (strtotime("2005-11-20") - strtotime("2005-11-26")) / (60 * 60 * 24);

print $days;) med variablerna från databasen ?

 

Länk till kommentar
Dela på andra webbplatser

Det är en databas för en stegräknar tävling jag försöker få att fungera.

Jag har 2 tabeller en med namn anställningsnummer och lag tillhörighet och den andra tabelen lagras anställningsnummer, antal steg, timestamp och startdatum.

 

Jag kör en fråga för att summera alla inrapporterade steg som den anställde har tagit och behöver då antalet dagar mellan startdatum och den senaste rapporteringen.

 

Min sql fråga ser ut så här nu:

SELECT `data`.startdatum, MAX(datum)
FROM `data`
WHERE person_annr = colname

 

Hur får jag in DATEDIFF i den frågan ?

 

Länk till kommentar
Dela på andra webbplatser

Okey..:) Nu har jag fått till det.

SELECT person_annr, DATEDIFF(MAX(datum) ,startdatum )
FROM `data`
GROUP BY person_annr

Här får jag fram antal dagar för varje person som lagrat resultat.

Nu behöver jag dividera resultatet med antal steg för att få fram snitt / dag.

Hur gör jag?

Antal steg som är inrapporterade får jag fram med följande sql fråga

SELECT person_annr, sum(steg)
FROM `data`
GROUP BY person_annr

 

Har försökt dividera men får 0 som resultat....

[inlägget ändrat 2008-11-15 19:40:17 av Poj]

Länk till kommentar
Dela på andra webbplatser

Här går det undan.

Jag lyckades köra båda frågorna i samma sql sats.

SELECT person_annr, sum(steg), DATEDIFF(MAX(datum) ,startdatum )
FROM `data`
GROUP BY person_annr

Och får fram det så här

<?php echo $row_Recordset4['sum(steg)']/$row_Recordset4['DATEDIFF(MAX(datum) ,startdatum )']; ?>

 

Ska försöka runda av resultatet för jag får en massa decimaler....

 

Länk till kommentar
Dela på andra webbplatser

Jag kan visa hur mina två tabeller ser ut

Detta är 'person' tabellen

Fält Typ Null Standard

id int(10) Nej

annr int(10) Nej

lag int(10) Ja NULL

namn varchar(40) Nej

 

detta är 'data' tabellen

 

Fält Typ Null Standard

id int(10) Nej

person_annr int(10) Nej

steg int(10) Nej

datum timestamp Nej CURRENT_TIMESTAMP

startdatum date Nej 2008-11-01

 

Tabell 'person' är lagrad med anställningsnummer ,namn och lag. Det ingår tre personer i varje lag. Den anstälde skriver in sitt anställningsnummer i ett sökformulär och kommer till en sida där dom ser sitt namn och lagtillhörighet, där finns ett formulär för att lagra steg + anställningsnummer i 'data' tabellen. Därefter kommer dom till en sida som säger att dom skall nollställa stegräknaren.

 

Vill man sen se sitt resultat och snitt får man skriva sitt anställningsnummer på en ny söksida och därefter får man fram sina uppgifter.

 

Här skulle jag vilja komma direkt efter att man lagrat sina steg men jag vet inte hur man får med sitt anställningsnummer den sidan.

 

Jag försöker också få fram lagets totala steg och snitt, det fick jag med denna fråga:

 
SELECT person.lag, `data`.steg,SUM(steg)
FROM person, `data`
WHERE person.lag AND person.annr = `data`.person_annr
GROUP BY person.lag

 

 

 

Poj.

 

[inlägget ändrat 2008-11-16 17:44:49 av Poj]

Länk till kommentar
Dela på andra webbplatser

Jag har ett problem till.

Jag vet inte hur jag skall ställa denna fråga i sql.

Hur får jag ut mitt lags sammanlagda steg? , jag skickar en variabel iform av mitt anställningsnummer (annr) . Hur tabellerna ser ut ser ni i föregåenede svar.

 

Jag får ut alla lagen så här

SELECT person.lag, `data`.steg,SUM(steg)
FROM person, `data`
WHERE person.lag AND person.annr = `data`.person_annr
GROUP BY person.lag
ORDER BY SUM(steg) DESC

och mitt eget resultat så här:

SELECT person_annr, sum(steg), DATEDIFF(MAX(datum) ,startdatum )
FROM `data`
WHERE person_annr = colname
GROUP BY person_annr

 

 

Länk till kommentar
Dela på andra webbplatser

Du kan inte kombinera SUM(steg) och datediff som du gör det ( vilket visar sig )

 

Förklara lite mer vad du vill få ut av det hela.

 

Länk till kommentar
Dela på andra webbplatser

Jo det fungerar :thumbsup: båda kodsnuttarna fungerar.

Det jag vill veta är hur jag skall få fram mitt lags resultat (varje lag består av 3 personer). Namnen på lagkamraterna och den sammanlagda antalet steg.

Jag visar bara koden för hur jag får fram alla lagen och mitt eget resultat.

 

Lite bättre förklaring:

I person tabellen vill jag hitta mitt anställningsnr (annr) (som finns i variabeln colname) när det är hittat skall jag läsa av mitt lagnr och hitta dom andra med samma lagnr, ta deras annr och gå till data tabellen och hitta samma anställningsnummer i person_annr columnen och räkna ihop stegen för laget.

 

 

[inlägget ändrat 2008-11-20 21:46:29 av Poj]

Länk till kommentar
Dela på andra webbplatser

Satt och försökte böka ihop en query med nån form av join, men det enklaste är väl ändå om du bara kör 2 frågor:

 

SELECT lag from person where annr=colname;

för att få ut lagnumret

och

 

select SUM(data.steg), person.lag from person inner join data on person.annr=data.pers_annr where person.lag=variabel_med_laget group by person.lag;

för att få ut totala antal steg i laget.

 

Enkelt och fult, men det lär garanterat fungera i alla fall....

 

[inlägget ändrat 2008-11-21 23:14:00 av jomentjena]

Länk till kommentar
Dela på andra webbplatser

Jag får det inte att fungera!!!

Jag använder dreamweaver's postmängd Recordset.

Jag får ett felmeddelande när jag testar:MM_ERROR: MySQL Error#: 1054 Unknown column 'data.pers_annr' in 'on clause'

 

Kan jag köra båda frågorna i samma recordset?

Hur använder jag variabeln variabel_med_laget ??

 

Jag vill verkligen få detta att fungera..

 

PS. Jag har ändrat i tabellerna jag har flyttat startdatum från data till person tabellen. DS.

 

[inlägget ändrat 2008-11-22 19:57:41 av Poj]

Länk till kommentar
Dela på andra webbplatser

Svaret står ju i felmeddelandet. Du har angett fältnamnet data.pers_annr i din join-query men fältet heter ju faktiskt inte så, utan data.person_annr

 

Felmeddelanden skall man alltid analysera noga, eftersom svaren oftast ganska enkelt går att hitta däri.

 

Länk till kommentar
Dela på andra webbplatser

Enkelt för dom som kan, jag har inte jobbat så mycket med mysql men försöker lära mig.

Jag skrev koden så här nu:

SELECT lag from person where annr=colname; 
SELECT SUM(data.steg), person.lag
FROM person inner join data on person.annr=data.person_annr
WHERE person.lag=variabel_med_laget
GROUP BY person.lag

colname är en formulär variabel med mitt anställningsnummer.

 

Jag får detta felmeddelande nu:

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 '; select SUM(data.steg), person.lag from person inner join data on person.annr=d' at line 1

 

Kan jag köra båda frågorna så här? eller måste jag köra dom var för sig.

hanterar jag variabel_med_laget rätt?

 

Länk till kommentar
Dela på andra webbplatser

Allting fungerar på min test server Mysql 5.0.51b men när jag skulle lägga upp det på nätet så får jag felmeddelande;

MySQL Error#:1111

Invalid use of group funktion

 

SELECT person.lag, `data`.steg,SUM(steg)

FROM person, `data`

WHERE person.lag AND person.annr = `data`.person_annr

GROUP BY person.lag

ORDER BY SUM(steg) DESC

 

Webhotellet kör med Mysql 4.0.21

Något skilljer tydligen mellan versionerna men vad?

Hur löser jag det?

 

 

Poj.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...