Toon posts:

[HTML GUI]Hoe N-N tabellen laten koppelen via form

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb twee tabellen:
Klanten
Projecten
Een klant kan bij 1 of meerdere projecten horen en een project kan bij 1 of meer klanten horen.
Het gaat hier dus om N op N tabellen.
In de MySQL database los ik dat op met een tussentabel.

Nu moeten deze tabellen te wijzigen zijn via een intranet (PHP/HTML).
Ik heb dit al eens eerder gedaan en toen was 1 van de tabellen niet zo groot en heb ik het destijds opgelost door alle rijen uit die tabel als checkboxen te tonen. Dat werkte toen goed.
Maar nu heb ik twee grote tabellen, beide meer dan 300 rijen.
Hoe los ik het dan op?
Ik had al even gedacht aan listboxen met de optie multiple maar dan moet je zoveel scrollen en als je dan per ongeluk verkeerd scrollt/klikt kun je weer opnieuw beginnen.

Nog even in het kort:
De gebruiker wil een klant wijzigen, die klant hoort al bij een aantal projecten en er moet 1 of meerdere projecten bij.

Dus mijn vraag is, heeft iemand al eens een soort gelijk probleem gehad en wat was toen de oplossing?

Het gaat mij dus niet om code, maar meer om de manier waarop.

--
Paul

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Probeer het steeds vanaf 1 kant te benaderen, dus je gaat 1 project onderhouden en die aan 1 of meerdere klanten koppelen en omgekeerd, dus een klant onderhouden en aan 1 of meerdere projecten koppelen.
Wat de interface betreft zou ik iets met een select/option doen om zo de boel een beetje beheersbaar te houden. Je zou evt wat met javascript kunnen doen om de boel wat sneller te laten werken icm zoeken/suggesties etc.
Zoiets (niet helemaal wat je bedoeld maar you get the idea):
http://dev.barad-dur.nl/security/

[ Voor 11% gewijzigd door MTWZZ op 12-10-2006 16:22 ]

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
Dat van een filter had ik nog niet aan gedacht, dat kan mooi in mijn situatie omdat de projecten per jaar worden bewaard.
Ik zal kijken of ik het geimplementeerd krijg.

Inmiddels ben ik ook al bezig met de sql query (MySQL) om de data er uit te halen.
Als ik de gegevens van een klant opvraag en ik wil alle projecten waar de klant bij zit ook hebben dan kan ik dat op twee manieren doen:
1: Een gecombineerde query waarbij er, in geval van drie projecten, drie rijen worden gevonden waarbij de klantgegeves steeds gelijk zijn en alleen de projectgegevens verschillen.
2. Twee queries gebruiken, waarbij ik eerst de klant gegevens ophaal (1 rij) en vervolgens de projectgegevens (1 of meerdere rijen).

Nu is mijn vraag, kan ik ook 1 query gebruiken waarbij de projectgegevens als een array wordt terug gegeven? Ik ben al wezen zoeken maar ik weet ook niet precies waarnaar. Ik denk dat het niet kan.

Ter verduidelijking een deel van mijn tabellen:
Klanten
---------
|ID|Naam |
|1 |Test1|
|2 |Test2|
|3 |Test3|
|4 |Test4|
---------

Projecten
--------------------
|ID|Omschrijving    |
|1 |Hoort bij klant1|
|2 |Hoort bij klant3|
|3 |Project 3, hoort bij klant2|
|4 |Project 4, hoort bij klant2|
|5 |Project 5, hoort bij klant2|
--------------------

klantenProjecten
-------------------
|KlantID|ProjectID|
|1      |1        |
|2      |3        |
|2      |4        |
|2      |5        |
|3      |2        |
-------------------

De gecombineerde sql:
SQL:
1
2
3
4
5
6
7
8
select k.Naam as Klantnaam
, p.Omschrijving as Projectomschrijving
from Klanten as k
, Projecten as p
, KlantenProjecten as kp
where k.ID=2
and k.ID=kp.KlantID
and kp.ProjectID=p.ID

Het resultaat:
Klantnaam | Projectomschrijving
Test2     | Project 3
Test2     | Project 4
Test2     | Project 5


Ik zou graag terug krijgen:
Klantnaam | Projectomschrijving
Test2     | Project 3, Project 4, Project 5

Mocht dit niet lukken dan los ik het wel op via PHP met twee queries.

--
Paul

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Het kan zeker maar het kost iets meer programmeer werk. Waar je op kunt zoeken is Object/Relational mapping, daar zijn veel frameworks etc voor maar het is zelf ook prima op te lossen.

Quick-n-dirty voorbeeldje:
class klant:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Klant {
public class Klant {
        $dptr;

        public __construct()
        {
                $this->dptr = mysql_connect("foo","bar", "baz");
                mysql_select_db("foo", $this->dptr);
        }

        public Load($klantid)
        {
                $result = mysql_select("SELECT * FROM klant WHERE klantid = '$klantid'", $this->dptr);
                // meuk om de klant data op te slaan
        }
}


class Project
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Project {
        $dptr;

        public __construct()
        {
                $this->dptr = mysql_connect("foo","bar", "baz");
                mysql_select_db("foo", $this->dptr);
        }

        public List(Klant $klant)
        {
                $query = "SELECT P.* FROM klantprojecten AS KP INNER JOIN projecten AS P ON p.id = kp.projectid";
                $query .= " WHERE KP.klantid = " . $klant->Id;

                $result = mysql_select($query, $this->dptr);

                // meuk om de project data op te slaan in
                // een loopje omdat dit er waarschijnlijk meer zijn
        }
}

Nu met Land Rover Series 3 en Defender 90