[mysql] 3 tabellen aan elkaar koppelen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Crispijn -

Crispijn -

07/01/2007 21:56:00
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -
 
PHP hulp

PHP hulp

19/11/2024 16:32:19
 
Klaasjan Boven

Klaasjan Boven

07/01/2007 22:04:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
Jan Koehoorn

Jan Koehoorn

07/01/2007 22:07:00
Quote Anchor link
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.
 
Crispijn -

Crispijn -

07/01/2007 22:14:00
Quote Anchor link
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

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
 
Crispijn -

Crispijn -

07/01/2007 22:18:00
Quote Anchor link
@Jan: DOH! Dat is inderdaad waar.

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

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

?>


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



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.