Hulp nodig bij SQL querie.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stephanie Buijs

Stephanie Buijs

09/01/2013 20:45:10
Quote Anchor link
]Hallo allemaal,

Ik ben bezig een data model aan het maken als oefening. In de link vind u de aangemaakte tabellen.
http://stap.iam.hva.nl/~buijs74/sql/index.html
Ik wil graag een querie schrijven die berekent hoeveel klanten een bepaald aantal aankopen heeft gedaan.
De uitkomst waar ik naar op zoek ben is zoiets:

3 klanten - 1 aankoop gedaan
1 klant - 2 aankopen gedaan
1 klant - 3 aankopen gedaan
etc..

Ik dacht dat dit mogelijk was door gebruik te maken van een JOIN.
Ik ben zo ver gekomen, maar krijg steeds een foutmelding.

SELECT verkoop.*, klant.voornaam, klant.achternaam COUNT(klant.ID)
FROM verkoop
INNER JOIN klant
ON verkoop.klant_ID = klant.klant_ID
INNER JOIN schoen
ON verkoop.schoen_ID = schoen.schoen_ID
GROUP BY klant.ID

Wat doe ik fout?

Super bedankt alvast!
Gewijzigd op 09/01/2013 21:02:57 door Stephanie Buijs
 
PHP hulp

PHP hulp

11/12/2024 22:00:04
 
Albert de Wit

Albert de Wit

09/01/2013 21:07:05
Quote Anchor link
Dit is een beetje verwarrend.

3 klanten - 1 aankoop gedaan
1 klant - 2 aankopen gedaan
1 klant - 3 aankopen gedaan

Wat is trouwens je foutmelding?
 
Stephanie Buijs

Stephanie Buijs

09/01/2013 21:12:05
Quote Anchor link
Het komt er op neer dat ik een database maak waarin mensen een klantenkaart hebben. Met deze klantenkaart kunnen ze sparen voor korting. Per aankoop krijgen ze 1 punt. Dus het gaat er mij om dat je kunt zien hoeveel klanten 1 punt op hun kaart hebben (ofterwijl hoeveel aankopen ze hebben gedaan). Hoeveel mensen 2 punten op hun kaar hebben staan, etc. etc.
Ik hoop dat het nu wat duidelijker is.

Dit is de foutmelding:
#1064 - 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 'COUNT(klant.ID) FROM verkoop INNER JOIN klant ON verkoop.klant_ID = klant.klant' at line 1
Gewijzigd op 09/01/2013 21:14:33 door Stephanie Buijs
 
Albert de Wit

Albert de Wit

09/01/2013 21:14:10
Quote Anchor link
dat is omdat er voor die count nog een komma moet.
 
Stephanie Buijs

Stephanie Buijs

09/01/2013 21:15:14
Quote Anchor link
Ah. Mijn fout.

Maar nu heb ik deze foutmelding:

#1054 - Unknown column 'klant.ID' in 'field list'
 
Albert de Wit

Albert de Wit

09/01/2013 21:17:44
Quote Anchor link
klant.ID bestaat niet. klant.klant_ID misschien wel? dit spreekt best wel voor zich :/
Gewijzigd op 09/01/2013 21:18:01 door Albert de Wit
 
Stephanie Buijs

Stephanie Buijs

09/01/2013 21:22:34
Quote Anchor link
Sorry. Ook dit is gewoon stom van mij.

Nog een foutmelding.
#1052 - Column 'klant_ID' in field list is ambiguous

Echt super bedankt dat je me helpt trouwens!!!!!! :)
 
No One

No One

09/01/2013 21:24:50
Quote Anchor link
dat betekent dat ie zowel in kolom a zit als in kolom b...dus daar moet je dan weer klant.klant_id doen...om te specificeren uit welke tabel hij mag selecteren...bij voorkeur waar de Id oorspronkelijk vandaan komt...

ik weet dat foutmeldingen van mysql en php niet erg duidelijk zijn...maar het is niet verboden je hersentjes er bij te gebruiken en stukken engelse tekst die je niet begrijpt in google translate te gooien ofzoiets ;)
Gewijzigd op 09/01/2013 21:25:49 door No One
 
Stephanie Buijs

Stephanie Buijs

09/01/2013 21:31:19
Quote Anchor link
Thnx. Ik ga mn best doen! :)
 
- SanThe -

- SanThe -

09/01/2013 23:12:49
Quote Anchor link
Stephanie Buijs op 09/01/2013 21:22:34:
Nog een foutmelding.
#1052 - Column 'klant_ID' in field list is ambiguous


Slaat dat misschien op deze: GROUP BY klant.ID
 
Aad B

Aad B

10/01/2013 12:04:55
Quote Anchor link
Stephanie Buijs op 09/01/2013 21:22:34:
Nog een foutmelding.
#1052 - Column 'klant_ID' in field list is ambiguous
Betekent dat MySQL niet weet uit welke tabel het moet komen omdat er meerdere mogelijkheden zijn, ambiguous betekent dat het in meerdere van de genoemde tabellen voorkomt. Oplossing: prefixen met de tabelnaam.
 
Donny Wie weet

Donny Wie weet

10/01/2013 16:02:27
Quote Anchor link
Albert de Wit op 09/01/2013 21:17:44:
klant.ID bestaat niet. klant.klant_ID misschien wel? dit spreekt best wel voor zich :/


@ albert: ik wist ook niet dat je tabelnaam.veld_naam kon doen. Ik deed altijd 1 tabel gebruiken. Dus select user, id, name from...

Tegenwoordig gebruik ik users.user, users.id, users.name,

Zo kan je ook makkelijk gegevens uit een andere tabel halen :)

Kortom: Spreekt niet voorzich :)
 
No One

No One

10/01/2013 16:10:44
Quote Anchor link
Dit soort dingen worden besproken in echt goede tutorials en boeken...kortom: spreekt wel voor zich..daarnaast is mysql gewoon een erg logische taal...oke het woord ambiguous is wellicht een onbekend woord...maar toch...ff google translate en je weet wat de foutmelding wellicht zou kunnen zijn...weet je het antwoord niet, ga je googelen...met alleen maar vragen kom je er ook niet...door te zoeken leer je zoeken en leer je je antwoorden te vinden...ook heel handig...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/01/2013 16:54:29
Quote Anchor link
@Stephanie,
Waarom join je een tabel (schoen) die je verder helemaal niet gebruikt in de fieldlist?
Waarom selecteer je ALLE kolommen van verkoop terwijl alleen maar hoeft te tellen?
Deze querie laat het aantal aankopen per klant zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT k.klant_id, k.voornaam, k.achternaam, COUNT(v.klant_id) AS aankopen
FROM klanten AS k
LEFT JOIN verkoop AS v USING (klant_id)
GROUP BY k.klant_id, k.voornaam, k.achternaam

Deze query laat zien hoeveel klanten een bepaald aantal aankopen heeft gedaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT aankopen, COUNT(*) AS per_aankopen
FROM
    (SELECT k.klant_id, COUNT(v.klant_id) aankopen
    FROM klanten AS k
    LEFT JOIN verkoop AS v ON k.klant_id = v.klant_id
    GROUP BY k.klant_id) AS vk
GROUP BY aankopen
 



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.