[PHP icm MySQL]Bewerken meerdere records

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb hier al een tijdje over na zitten denken maar ik kom niet echt op een nette oplossing uit.

situatie:
Er zijn 3 tabellen
- gebruikers
- gebruiker_films
- films

Iedere gebruiker kan films kiezen via een multiple selectbox (zoals je hier ook bij de search ziet), deze films worden uit de tabel films gehaald.
Als de gebruiker op opslaan drukt dan wordt in de tabel gebruiker_films de gekozen films opgeslagen, vaak gebeurt dit via de combinatie gebruiker.id en film.id. Mijn vraag is nu hoe zit het met het bewerken van deze tabel gebruiker_films. Bijvoorbeeld: Ik wil de films bij een gebruiker aanpassen. Ik open een edit pagina, de huidige films zijn geselecteerd. Ik verander wat films en druk op save.. en nu..

Wat ik nu doe vind ik zelf vies programmeren. Ik delete eerst alle films van de gebruiker uit gebruiker_films en vervolgens plaats ik alle nieuwe films terug.

Mijn vraag is eigenlijk kan dit ook netter. Bijvoorbeeld met mysql functies of primary, foreign key relaties. (Ik gebruik MyISAM tabellen, ik heb begrepen dat deze niks met foreign keys deden)

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Nou valt toch wel mee qua viesheid. Wat ik zelf doe is alleen die films weghalen die inderdaad gedeselecteerd zijn en alleen die toevoegen die erbij gekomen zijn. FK's zouden alleen helpen wanneer je gebruikers of films uit de database zou verwijderen. Je hoeft dan met een cascading delete niet meer de loze records uit je koppeltabel te verwijderen. Dit is alleen iets wat met zo'n simpele database ook gemakkelijk zelf bij te houden is.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Der zijn maar 2 mogelijkheden hier imho (met MyISAM iig):

1. Alles verwijderen en weer inserten (het is maar een koppeltabel, geen primary key ofzo die zichzelf verhoogt en relaties in de war kan brengen).
2. Wijzigingen bijhouden en doorvoeren

De eerste heeft mijn voorkeur :) Scheelt veel werk, mogelijke fouten en is betere performance (altijd 2 eenvoudige queries).

Bij hele grote verzamelingen (een gebruiker kan honderden films selecteren bijvoorbeeld) dan kan de tweede optie mogelijk winst op gaan leveren bij de inserts.

[ Voor 28% gewijzigd door Bosmonster op 08-08-2005 13:38 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
De reden waarom ik alleen die records verwijder die in het formulier verwijderd zijn en alleen diegenen toevoeg die ook echt toegevoegd zijn, is omdat je dan onafhankelijk bent van de query die er in eerste instantie voor heeft gezorgd dat de records in het formulier werden getoond. Stel dat je het systeem uitbreid met een genre veld voor elke film, en daarmee alleen films van een gebruiker in een bepaald genre toont. Ga je dan vervolgens alle relaties weggooien en de boel weer opnieuw opbouwen, dan ben je alle relaties uit andere genres kwijt.