[mysql] 3 tabellen aan elkaar koppelen
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?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;
?>
$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
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?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;
?>
$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
Carthesisch product gepresenteerd van alle tabellen die in de query opgenoemd worden.
Nogal logisch; je hebt helemaal geen WHERE condition in je query. In zo'n geval krijg je van MySQL het Na het testen krijg ik ook direct de volgende syntax
Quote:
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
Ik heb het zo opgelost (alles goed alleen de WHERE condition toegevoegd):
Dit werkt. Bedankt. Het is soms ook zo simpel he... ;-)