Genormaliseerde database bevragen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ama saril

ama saril

19/05/2016 15:10:48
Quote Anchor link
Beste Php'ers,
Ik heb de volgende database (Dit is een simpel voorbeeld om even me vraag te stellen):
tbl_persoon
id
naam
adres
woonplaats

tbl_bestelling
id
persoon_id
product_id
datum

nu zou ik graag het volgende willen ophalen:
de personen die de volgende 3 producten hebben besteld met het product_id 1, 5 en 12

Nu deed ik het vroeger altijd door een stukje php hiervoor te coderen maar dit dit is volgens mij niet efficient en kost veel werk dus zou het liever in 1 query willen oplossen.

Het onderstaande werkt niet:
select p.id FROM tbl_persoon p JOIN tbl_bestelling b ON p.id = b.persoon_id WHERE product_id = '1' OR product_id = '5' OR product_id = '12'
(Als ik een AND hiervoor gaat dit natuurlijk ook niet lukken)
Ik heb al zitten zoeken en volgens mij moet het met subqueries op te lossen zijn maar ik kom hier echt niet uit. Kan iemand misschien een voorbeeld geven om dit probleem op te lossen zodat ik daar in me eigen database op verder kan voortborduren?

Bedankt!
 
PHP hulp

PHP hulp

22/12/2024 07:12:05
 
Thomas van den Heuvel

Thomas van den Heuvel

19/05/2016 16:16:17
Quote Anchor link
Moeten deze producten in één bestelling zitten, of mogen deze over verschillende bestellingen (van dezelfde persoon) verspreid zijn?

Mogelijk ontbreekt er ook een tabel? Nu heb je een bestelling (orders) tabel, en waar deze bestelling uit bestaat (de producten - orderregels) ondergebracht in één tabel of wellicht kun je op dit moment helemaal niet afleiden wat één bestelling omvat omdat de "id" kolom in tbl_bestelling een auto-increment id is? Er valt iets voor te zeggen om bestellingen en waar deze uit bestaan op te splitsen in twee tabellen.
 
Jan de Laet

Jan de Laet

19/05/2016 19:32:17
Quote Anchor link
@Ama, zoals Thomas al aangaf, je vraag is niet helemaal duidelijk.

Als je de personen zoekt die ooit product 1, 5 of 12 in een bestelling hadden, dan kan dat zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT DISTINCT p.id, p.naam FROM tbl_bestelling
JOIN tbl_persoon p ON tbl_persoon.id=tbl_bestelling.persoon_id
WHERE tbl_bestelling.product_id in (1, 5, 12)


Regel 1 en 3 vindt alle regels waar product_id is 1, 5, of 12. (afhankelijk van je type veld misschien tussen '-tekens)
Regel 2 koppelt deze bestellingen aan de tbl_persoon.
Je toont verder alleen p.id en p.naam. Ik gebruik DISTINCT op regel om alleen de unieke resultaten te zien.

Het zou ook zo kunnen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT p.id, p.naam FROM tbl_persoon p
WHERE p.id IN
     (SELECT DISTINCT persoon_id FROM tbl_bestelling WHERE product_id in (1, 5, 12))

Regel 3 bouwt een lijst met persoon_ids voor gevraagde bestelling.
Op regel 2 gebruik je deze lijst om de personen te vinden.
Gewijzigd op 19/05/2016 19:33:09 door Jan de Laet
 
Ama saril

ama saril

24/05/2016 10:27:36
Quote Anchor link
Excuses voor het late antwoord heb in het weekend geen computer aangeraakt.
Ik ga even alle replies nalezen en kijken of ik er uitkom.
 
Ama saril

ama saril

27/05/2016 14:33:58
Quote Anchor link
Heb inmiddels mijn oplossing gevonden. Ik wist inet dat 'in' er was. Ik heb deze geimplementeerd in de query en nu werkt alles correct.

Bedankt!
 



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.