[mysql - beginners] persons en companies in 1 tabel

Pagina: 1
Acties:

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
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.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

je zal je items tabel twee keer in de from moeten opnemen. In die richting kan je je oplosing gaan zoeken.

Het is aan te bevelen om even een goeie SQL handleiding compleet door te nemen aangezien de oplossing eigenlijk een heel standaard SQL query is.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
je zal je items tabel twee keer in de from moeten opnemen
ja precies... dat moet idd, ik ga eens kijken of dat kan..

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
Hoi Dusty, bedankt voor je tip. Ik had al een gevoel dat het in die richting zou moeten zijn en volgens mij ben ik er uit en is het eigenlijk ook weer: SIMPEL.

De query die ik nu heb en werkt (tabellen en velden heten iets anders dan in voorbeeld):

SELECT * FROM bb2_items t1, bb2_items t2, bb2_item_relations t3
WHERE t1.name1 LIKE 'piet%'
AND t1.item_id = t3.item_src_id
AND t2.item_id = t3.item_dst_id

  • js303
  • Registratie: April 2003
  • Laatst online: 01-08 22:19
ik begrijp het principe van hoe een SELECT werkt nu ook weer wat beter.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Gewoon ermee blijven spelen en het wordt steeds makkelijker :)

btw select * from werkt niet netjes.

Netter is om elke veld apart te vermelden, of op zijn minst de t1.*, t2.* ipv * aangezien gewoon * als je selecteert van meerdere tabellen niet in elke database zal gaan werken.

[ Voor 66% gewijzigd door dusty op 17-06-2003 13:55 ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1