Door
chris Bosmans
op 17-10-2016 19:31
gewijzigd op 17-10-2016 21:56
1.965 views
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:
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
";
?>
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 :-)