hallo tweakers,
ik probeer een generieke mysql database op te zetten waarin oa. personen, companies en andere 'items' in 1 tabel staan. nu moeten er veel:veel koppelingen mogelijk zijn tussen deze items, zodat bijv. item A een relatie met item B, C en D kan hebben.
ik bedacht de volgende tabellen:
items - hierin staan de eigenlijke gegevens per item zoals:
> item_id (unieke auto_inc)
> item_type (persoon, company, etc)
> naam
> adres
item_relations - dit is een kruistabel die oa de volgende velden heeft:
> item_rel_id (unieke auto_inc)
> item_src_id (id van het hoofd-item)
> item_dst_id (id van item dat gekoppeld is aan item_src_id
> item_rel_description (omschrijving van relatie tussen src_id en dst_id)
stel, in tabel items staan 2 kaarten.
kaart 1 is een persoonskaart 'Piet'.
kaart 2 is een companykaart genaamd 'Klaas BV'.
Piet werkt oa. bij dit bedrijf, zijn rol in dit bedrijf is 'mysql programmeur' en staat opgeslagen in een kaart in tabel item_relations. in deze kaart staat tevens de verbinding tussen de id van Piet en Klaas BV.
nu wil ik in 1 klap - dus in 1 result, alle gegevens van Piet, Klaas BV en hun relatie omschrijven. dit zou een simpele SQL query zijn als Piet in een tabel 'persons' zou staan en Klaas BV in een tabel 'companies':
SELECT * FROM persons, companies, item_relations
WHERE persons.name LIKE 'piet'
AND persons.person_id = item_relations.person_id
AND companies.company_id = item_relations.company_id
maar nu wil ik eigenlijk zoiets:
SELECT * FROM items, item_relations
WHERE items.name LIKE 'piet'
AND items.item_id = item_relations.item_src_id
AND items.item_id = item_relations.item_dst_id
maar dat geeft natuurlijk 0 results, aangezien er maar 1 item_id is... hoe kan ik dit anders aanpakken? iets met aliassen wellicht? misschien is hier al documentatie over of een andere thread, maar ik kan weinig vinden daar ik niet weet waarop ik precies moet zoeken.
bedankt, jeroen.
ik probeer een generieke mysql database op te zetten waarin oa. personen, companies en andere 'items' in 1 tabel staan. nu moeten er veel:veel koppelingen mogelijk zijn tussen deze items, zodat bijv. item A een relatie met item B, C en D kan hebben.
ik bedacht de volgende tabellen:
items - hierin staan de eigenlijke gegevens per item zoals:
> item_id (unieke auto_inc)
> item_type (persoon, company, etc)
> naam
> adres
item_relations - dit is een kruistabel die oa de volgende velden heeft:
> item_rel_id (unieke auto_inc)
> item_src_id (id van het hoofd-item)
> item_dst_id (id van item dat gekoppeld is aan item_src_id
> item_rel_description (omschrijving van relatie tussen src_id en dst_id)
stel, in tabel items staan 2 kaarten.
kaart 1 is een persoonskaart 'Piet'.
kaart 2 is een companykaart genaamd 'Klaas BV'.
Piet werkt oa. bij dit bedrijf, zijn rol in dit bedrijf is 'mysql programmeur' en staat opgeslagen in een kaart in tabel item_relations. in deze kaart staat tevens de verbinding tussen de id van Piet en Klaas BV.
nu wil ik in 1 klap - dus in 1 result, alle gegevens van Piet, Klaas BV en hun relatie omschrijven. dit zou een simpele SQL query zijn als Piet in een tabel 'persons' zou staan en Klaas BV in een tabel 'companies':
SELECT * FROM persons, companies, item_relations
WHERE persons.name LIKE 'piet'
AND persons.person_id = item_relations.person_id
AND companies.company_id = item_relations.company_id
maar nu wil ik eigenlijk zoiets:
SELECT * FROM items, item_relations
WHERE items.name LIKE 'piet'
AND items.item_id = item_relations.item_src_id
AND items.item_id = item_relations.item_dst_id
maar dat geeft natuurlijk 0 results, aangezien er maar 1 item_id is... hoe kan ik dit anders aanpakken? iets met aliassen wellicht? misschien is hier al documentatie over of een andere thread, maar ik kan weinig vinden daar ik niet weet waarop ik precies moet zoeken.
bedankt, jeroen.