[CF - MySQL] Lists / Array in combinatie met een query

Pagina: 1
Acties:

  • BlaTieBla
  • Registratie: November 2000
  • Laatst online: 08:45

BlaTieBla

Vloeken En Raak Schieten

Topicstarter
Ik heb 2 tabellen.
tabel 1:
ProductIdProductNaamProductOmschrijving
1Product XOmschrijving Product X


table 2:
KlantId
ProductIds
1
2,5,7,9


Tabel 1 spreekt voor zich (als dat niet het geval is, hoor ik het wel)
Tabel 2 bevat de klant ID's en de tweede kolom bevat een lijst met alle producten.
(Deze lijst loopt altijd van laag naar hoog).

Wat mij op het moment niet wil lukken (writersblock ofzo) is om van die lijst met ProductIds (tabel 2) d.m.v. een query de betrefende namen erbij te krijgen.

Ik kan namelijk weinig (lees:niets) terugvinden over MySQL queries in combinatie met lists / arrays.

Wat ik dus niet voor elkaar krijg is;
zoek van klant 1, met productIds 2,5,7,9 de productnamen (uit tabel 1) bij elkaar.

Misschien dat iemand mij even in de juiste richting kan sturen....

b.t.w. scripting engine is Coldfusion

leica - zeiss - fuji - apple | PSN = Sh4m1n0


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:27

gorgi_19

Kruimeltjes zijn weer op :9

Afgezien van het feit dat ik vraagtekens heb bij je databasemodel, (productsID's horen imho niet in een array te staan) kan dit niet door middel van 1 query opgelost worden in MySQL

Eerste query:
code:
1
Select ProductIDs FROM klanttabel WHERE klantID = 1

De uitkomst noemen we even variabele X

Tweede Query
code:
1
Select ProductNaam FROM producten WHERE ProductID IN(X)

Volgens mij moet je dan wel alle producten kunnen krijgen

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:21
Dit is nu wat je noemt een slecht databank ontwerp.
Je kunt beter als volgt werken:
Een tabel Product
Een tabel Klant
En een tabel KlantProduct oid, waar je voor ieder klantid - productid een record hebt.

Product:
ProductId
ProductNaam
...

Klant:
KlantId
Klantnaam
....

KlantProduct
KlantId
ProductId

Op die manier kun je met een eenvoudige query de gegevens die jij wilt opvragen.

https://fgheysels.github.io/


  • BlaTieBla
  • Registratie: November 2000
  • Laatst online: 08:45

BlaTieBla

Vloeken En Raak Schieten

Topicstarter
whoami schreef op 17 oktober 2002 @ 11:33:
Dit is nu wat je noemt een slecht databank ontwerp.
Je kunt beter als volgt werken:
Een tabel Product
Een tabel Klant
En een tabel KlantProduct oid, waar je voor ieder klantid - productid een record hebt.
Daar heb ik ook nog aan zitten denken. Wat mij dan tegen hing, was het feit, dat in de tabel klantproduct de klanten -tig keer voor kunnen komen.
Bij een update hoef ik nu maar 1 record te updaten, anders moet ik heel de tabel door om veranderingen door te voeren.
Misschien dat ik hier compleet fout zit (zal niet de eerste keer zijn :) ).

Anyway, ik heb weer wat stof ter verwerking gekregen......

leica - zeiss - fuji - apple | PSN = Sh4m1n0


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:27

gorgi_19

Kruimeltjes zijn weer op :9

:?
code:
1
Update klant SEt naam='nieuwe naam' WHERE klantID = 1

Je gaat toch niet regeltje voor regeltje je database aanpassen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • BlaTieBla
  • Registratie: November 2000
  • Laatst online: 08:45

BlaTieBla

Vloeken En Raak Schieten

Topicstarter
gorgi_19 schreef op 17 oktober 2002 @ 12:18:
:?
code:
1
Update klant SEt naam='nieuwe naam' WHERE klantID = 1

Je gaat toch niet regeltje voor regeltje je database aanpassen?
Het aanpassen is code technisch tuurlijk maar 1 regel. Alleen de database is er langer mee bezig.
Daarbij komt ook, dat 1 record aanpassen een kleinere foutkans heeft dan 100+ records.

Let wel, dit zijn mijn initiele overwegingen geweest. Ik blijf open staan voor suggesties.

leica - zeiss - fuji - apple | PSN = Sh4m1n0


Verwijderd

Wat Whoami voorstel is idd. de juiste manier. Die extra tabel met userID en ProdID wordt ook wel een LineItem genoemd. LineItems gebruik je als je een many to many relatie hebt. Maw; 1 product kan bij meerdere UserID's horen, en een UserID kan weer bij meerdere ProdID's horen = many 2 many

Met een simpele query in de lineitem tabel kun je alle producten van een klant vinden of alle klanten van een bepaald product.

  • BlaTieBla
  • Registratie: November 2000
  • Laatst online: 08:45

BlaTieBla

Vloeken En Raak Schieten

Topicstarter
thnx so far...

ik ga weer eens wat aanpassen.....

leica - zeiss - fuji - apple | PSN = Sh4m1n0


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:21
BlaTieBla schreef op 17 oktober 2002 @ 11:44:
[...]


Daar heb ik ook nog aan zitten denken. Wat mij dan tegen hing, was het feit, dat in de tabel klantproduct de klanten -tig keer voor kunnen komen.
Bij een update hoef ik nu maar 1 record te updaten, anders moet ik heel de tabel door om veranderingen door te voeren.
Misschien dat ik hier compleet fout zit (zal niet de eerste keer zijn :) ).

Anyway, ik heb weer wat stof ter verwerking gekregen......


Enkel het klantid komt -tig keer voor. En aangezien die 2 id's alletwee de pk zijn van bijhorende records in de andere tabellen zouden die op zich niet mogen wijzigen.
Als je klantgegevens aanpast (bv de naam), dan hoef je maar 1 record aan te passen want de naam komt maar 1x voor in de tabel klanten.

Misschien leer je hier ook nog iets uit:
normaliseren

https://fgheysels.github.io/

Pagina: 1