allen

Achtergrond
ik heb een onderhouds tabel en een klanten tabel
in de onderhouds tabel is een link naar de klanten (een klant ID)
nu wil ik een lijst tonen van alle klanten waar het jaarlijks (of 2 jaarlijks) onderhoud bijna vervalt
dus wil zeggen de query roept alle items op die tussen 15-10-14 en 15-11-14 in de tabel staan voor jaarlijks onderhoud en 15-10-13 en 15-11-13 voor 2 jaarlijks onderhoud.

deze query werkt.

<?php
$onderhoudj="Jaarlijks";
$onderhoudjj="2jaarlijks";
$exp1j= date('Ymd', time() - 31536000);  // huidige datum -1 jaar 
$dom1j= date('Ymd', time() - 34128000);  // huidige datum -1 jaar + 30 dagen
$exp2j= date('Ymd', time() - 63072000);  // huidige datum -2 jaar
$dom2j= date('Ymd', time() - 68256000);  // huidige datum -2 jaar + 30 dagen


$sql_onderhoud= mysql_query("SELECT *,DATE_FORMAT(Datum_onderhoud, '%d.%m.%Y') AS datum
FROM onderhoud 
WHERE  (typeonderhoud='$onderhoudj' AND Datum_onderhoud BETWEEN '$dom1j' AND '$exp1j') 
OR (typeonderhoud='$onderhoudjj' AND Datum_onderhoud BETWEEN '$dom2j' AND '$exp2j')
ORDER BY Datum_onderhoud ASC");
?>

hieruit krijg ik de Klant_ID zodat ik weet wie dit is.

nu wil ook de naam tonen + adres ,... van de klanten waar hun onderhoud bijna vervalt.
ik had gedacht met een join, maar dit geeft telkens een error, heb al verschillende tuts nagegaan maar lukt mij niet om een goed resultaat te bekomen dit is de query

<?php
$sql_onderhoud= mysql_query("SELECT 
klanten_gegevens.Naam,
klanten_gegevens.Voornaam,
klanten_gegevens.email,
klanten_gegevens.Adres,
klanten_gegevens.Huisnummer,
klanten_gegevens.Toevoeging,
klanten_gegevens.Postcode,
klanten_gegevens.Gemeente,
klanten_gegevens.Id_klant,
onderhoud.DATE_FORMAT(Datum_onderhoud, '%d.%m.%Y') AS datum,
onderhoud.Klant_ID
FROM onderhoud JOIN klanten_gegevens ON onderhoud.Klant_ID=klanten_gegevens.Id_klant 
WHERE  (typeonderhoud='$onderhoudj' AND Datum_onderhoud BETWEEN '$dom1j' AND '$exp1j')
OR (typeonderhoud='$onderhoudjj' AND Datum_onderhoud BETWEEN '$dom2j' AND '$exp2j')
ORDER BY Datum_onderhoud ASC");
?>


kan iemand ne tip geven
merci
Dan is er iets fout met je datums?

Of misschien heeft de query wel gewoon geen resultaten voor die periode, heb je dat al gecontroleerd, ik bedoel, zou dit resultaten moeten hebben?

Sowieso kloppen $dom2j en $exp2j volgens mij niet, het verschil tussen deze twee datums is ~[color=#ff0000]2[/color] maanden.

En dan dat datumformaat... Ymd? Waarom niet gewoon een DATE(TIME) in je database?
Precies het punt waar ik op wilde komen dus, maar gezien het gebruik van DATE_FORMAT ga ik er vanuit dat hij wel DATE(TIME) gebruikt, maar gewoon niet correct vergelijkt.
En dan heeft de query mogelijk helemaal geen resultaat, als een query verder syntactisch correct is - MySQL heeft verder geen idee van wat je probeert te doen dus als je lege domeinen zit te observeren zal MySQL gewoon teruggeven "geen resultaten gevonden, have a nice day".
ik had eerst deze query
en die werkte perfect (haalde de juiste velden uit mijn tabel)

<?php
$onderhoudj="Jaarlijks";
$onderhoudjj="2jaarlijks";
 $exp1j= date('Ymd', time() - 31536000); //20141115
 $dom1j= date('Ymd', time() - 34128000); //20141016
 $exp2j= date('Ymd', time() - 63072000); //20131115
 $dom2j= date('Ymd', time() - 68256000); //20130916


$sql_onderhoud= mysql_query("SELECT *,DATE_FORMAT(Datum_onderhoud, '%d.%m.%Y') AS datum FROM onderhoud WHERE  (typeonderhoud='$onderhoudj' AND Datum_onderhoud BETWEEN '$dom1j' AND '$exp1j') OR (typeonderhoud='$onderhoudjj' AND Datum_onderhoud BETWEEN '$dom2j' AND '$exp2j') ORDER BY Datum_onderhoud ASC");
?>


ik heb de de echo van de dom en exp er bij gezet
met deze functie krijg ik 4 resultaten
die gegevnes kan ik met een while functie tonen geen probleem hier.

alleen heb ik in deze tabel "onderhoud" alleen een link naar klant gegevens heb nl klant_ID.

de klant gegevens zitten in de tabel "klanten_gegevens" (adres, naam)

ik dacht dat ik met een join al deze gegevens tegelijk met een query kan tonen.

Dan levert je onderhoud-query wel resultaten op maar kloppen de klant id's niet, of bestaan deze niet in je klanten_gegevens tabel.

Verander je JOIN eens in een LEFT JOIN en controleer vervolgens of je klanten_gegevens data (allemaal) NULL waarden heeft.

Het klinkt alsof je niet werkt met foreign keys / de InnoDB engine, oftewel al je data hangt als los zand aan elkaar? Dan kunnen dit soort inconsistenties ook een stuk sneller optreden waarbij je data onderling niet meer klopt/past.

Tijd om je database eens fatsoenlijk op te zetten?

Reageren