ik heb volgende Query
left join van 2 tabellen
tabel 1 bevat de verval datum van een product
en tabel 2 aantal dagen dat een product goed is bijv 122 dagen.



<?php
$q_rep_case5=mysqli_query($link,"
SELECT
	 rs.BINLOC,
	 rs.DOOSNR,
         rs.SAMPLE_REMOVED,
         rs.IDH_BULK,
         DATE_FORMAT(rs.EXP,'%Y-%c-%d')AS NEW_EXP,
         shelflife.shelflife
FROM rs
LEFT JOIN 
shelflife ON 
   rs.IDH_BULK=shelflife.idh_nr 

WHERE  
rs.BINLOC='$binloc' 
AND
rs.DOOSNR='$doos'
AND 
rs.SAMPLE_REMOVED IS NULL ");

while ($row_q_rep_case5 = mysqli_fetch_array($q_rep_case5))        
{ 
$exp_date1=$row_q_rep_case5['NEW_EXP'];
$exp_date=strtotime( $row_q_rep_case5['NEW_EXP'], time());
$shellf= $row_q_rep_case5['shelflife'];
echo $exp_RS=date('d.M.Y', $exp_date + (($shellf/2)*3600*24));

}
?>


de query werkt en geeft me de vervaldatums die in mijn tabel staan en heeft daarbij de helft van de shelflife opgeteld.

maar nu komt het ik zou graag de maximum datum willen laten zien (niet de laatste in de tabel) maar die gene met de langste vervaldatum

ik dacht ik gebruik de functie max() maar deze geeft niets weer
iemand ideeen
MAX heeft de hoogste waarde van een set, dart gaat hier niet lukken want je selecteert meerdere waarden.
Wat je wel kunt doen is de set aflopend sorteren en dan maar één resultaatophalen:

ORDER BY veld DESC
LIMIT 1
ja maar het kan zijn dat mijn vervaldatums niet in lijn liggen

bedoel
uitkomst Query
7/11/2016
10/12/2016
8/11/2016
9/11/2016


dus dan is mijn hoogste datum die van december en niet de laatste in mijn kolom

de berekening komt niet uit een tabel maar wordt ter plaatste berekend

ho

7/11/2016 lijkt niet echt een datum.
Dat zijn toch wel velden van het type DATE? (2016-11-07)???


PS:
Het is niet bezwaarlijk om je query leesbaar neer te zetten.
Ook niet in je PHP script.
Af en toe eens op enter drukken doet wonderen voor de leesbaarheid:

<?php

$query = "SELECT kolom,
kolom2
FROM tabel
JOIN tabel2 ON x = y
";
?>
ik heb de datum gewoon ingetypt zijn niet de waarden uit mijn tabel
type is DATE in de sql

DATE_FORMAT(rs.EXP,'%Y-%c-%d')AS NEW_EXP
ah

je hebt in je tabel een kolom EXP
die is waarschijnlijk wel van het type DATE (of in elk geval een formaat yyyy-mm-dd)

Die haal je door DATE_FORMAT naar %Y-%c-%d waarbij je de %c laat veroorzaken dat maand 07 nu 7 wordt.

Vervolgens haal je die weer door strtotime om (2e parameter nutteloos hier) er het aantal seconden sinds 1970 van te bepalen.

Dan tel je er een aantal seconden bij op,
vervolgens in het formaat d.M.Y er weer een formaat aan te koppelen.


Dit had natuurlijk ook direct in de query gekund....




[size=xsmall]Toevoeging op 17/10/2016 21:57:08:[/size]

SELECT EXP + INTERVAL ROUND(shelflife.shelflife /2) DAY AS einddatum
FROM ...
LEFT JOIN ...
ORDER BY einddatum DESC
LIMIT 1
kan goed zijn maar dat is de expert way en kan altijd beter
ik probeer eerst een logische weg te vinden en dan achter af verfijnen


maar omdat ik de resultaten kreeg heb ik dit voorlopig zo gelaten

[size=xsmall]Toevoeging op 17/10/2016 22:03:34:[/size]

dat werkt

dus ipv date_add te doen kan je gewoon 2 tabellen optellen...
weer iets geleerd
2 kolomwaarden.

een tabel is de hele lijst met records....

kan goed zijn maar dat is de expert way en kan altijd beter
ik probeer eerst een logische weg te vinden en dan achter af verfijnen


Het is niet "the expert way", dat is gewoon hoe je dat soort dingen doet als je met databases werkt.

Databases zitten bomvol functies waarmee je dit soort berekeningen kunt doen *zonder* eerst alle records op te hoeven vragen. Eigenlijk is de regel heel simpel: als je met een for-lus door een setje records heen loopt om een andere reden dan om ze te printen, dan is het vrijwel altijd "fout" en kan het ook in een query. Belangrijk hierbij is dat de database er ontiegelijk bizar bijzonder veel sneller mee is.

Dat jij nog niet weet hoe je dat in een query moet doen is een ander verhaal, maar daar bestaan forums zoals phphulp voor :-)

Reageren