Ik ben bezig met een orders/reserveringen systeem. Ik heb alle orders in een lijst bji elkaar en nu wil ik bij elk order de bijbehordende klant ophalen

Ik heb de volgende tabellen:

orders
id|alle gegevens van de order

klant_order
klant|order

klanten
id|alle klantinformatie

Nu loop ik te stoeien met de volgende query

<?php
$sql_ktp = "SELECT
o.oid,
o.datum,
DATE_FORMAT(o.van, '%d-%c-%Y') AS van_d,
DATE_FORMAT(o.van, '%H:%i:%s') AS van_t,
DATE_FORMAT(o.tot, '%d-%c-%Y') AS tot_d,
DATE_FORMAT(o.tot, '%H:%i:%s') AS tot_t,
o.locatie,
o.personen,
o.prijs,
CASE
WHEN o.beves = 0 THEN 'good'
WHEN o.beves = 1 THEN 'wrong'
ELSE 'Onbekend'
END
AS beves,
CASE
WHEN o.betaald = 0 THEN 'good'
WHEN o.betaald = 1 THEN 'wrong'
ELSE 'Onbekend'
END
AS betaald,
ko.order,
ko.klant,
k.id,
k.naam
FROM
orders AS o,
klant_order AS ko,
klanten AS k
ORDER BY
'$sort'
LIMIT
".$offset.",".$messagePerPage;
?>

Nu heb ik maar 2 klanten en 3 orders in mijn database staan. Alleen met deze query weet hij het te presteren dat hij per klant alle 9 de mogelijkheden uitspuugt. Er komt dus 6 keer hetzelfde ordernummer voor.

Dat klopt niet. Er is iets mis met deze query maar ik kom er echt niet naar uit. Toen ik het met een INNER JOIN probeerde was het één grote ramp. Ik kreeg de syntax error er niet uit.

Wie weet de oplossing?

edit: Ik wil uiteindelijk ook op klant kunnen ordenen. Vandaar dat ik het in één query wil
<?php
$sql_ktp = "SELECT
DISTINCT(o.oid),
DISTINCT(o.datum),
DATE_FORMAT(o.van, '%d-%c-%Y') AS van_d,
DATE_FORMAT(o.van, '%H:%i:%s') AS van_t,
DATE_FORMAT(o.tot, '%d-%c-%Y') AS tot_d,
DATE_FORMAT(o.tot, '%H:%i:%s') AS tot_t,
DISTINCT(o.locatie),
DISTINCT(o.personen),
DISTINCT(o.prijs),
CASE
WHEN o.beves = 0 THEN 'good'
WHEN o.beves = 1 THEN 'wrong'
ELSE 'Onbekend'
END
AS beves,
CASE
WHEN o.betaald = 0 THEN 'good'
WHEN o.betaald = 1 THEN 'wrong'
ELSE 'Onbekend'
END
AS betaald,
DISTINCT(ko.order),
DISTINCT(ko.klant),
DISTINCT(k.id),
DISTINCT(k.naam)
FROM
orders AS o,
klant_order AS ko,
klanten AS k
ORDER BY
'$sort'
LIMIT
".$offset.",".$messagePerPage;
?>

al geprobeerd?

Btw ga niet met group by aan de gang dat is hier niet voor bedoeld
Nogal logisch; je hebt helemaal geen WHERE condition in je query. In zo'n geval krijg je van MySQL het Carthesisch product gepresenteerd van alle tabellen die in de query opgenoemd worden.
Ik heb er wel aan gedacht maar ik vond het persoonlijk niet zo'n nette oplossing. Ik dacht dat het wel netter kon. Korter vooral

Na het testen krijg ik ook direct de volgende syntax


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 'DISTINCT(o.datum), DATE_FORMAT(o.van, '%d-%c-%Y') AS van_d, DATE_FORMA' at line 3


Kijk ik er nou overheen of is dit gebrek aan sql kennis: Gebruik ik een GROUP BY??? :-D
@Jan: DOH! Dat is inderdaad waar.

Ik heb het zo opgelost (alles goed alleen de WHERE condition toegevoegd):

<?php

WHERE
k.id = ko.klant
AND
ko.order = o.oid

?>

Dit werkt. Bedankt. Het is soms ook zo simpel he... ;-)

Reageren