[php/mysql] relationele db updates

Pagina: 1
Acties:

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ik heb hier een database met oa. personen en diverse secties. Die personen kunnen 'lid' zijn van verschillende secties. Om dit zaakje te beheren heb ik een html-formuliertje met daarop een aantal checkboxen, waarop de secties voor die persoon kunnen worden aan/uit-gezet. Hieronder een stuk van de code die dan wordt uitgevoerd:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$result = mysql_query("delete from sectieleden where id_adv=$id");
if ($sec1 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=1");
if ($sec2 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=2");
if ($sec3 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=3");
if ($sec4 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=4");
if ($sec5 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=5");
if ($sec6 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=6");
if ($sec7 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=7");
if ($sec8 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=8");
if ($sec9 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=9");
if ($sec10 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=10");
if ($sec11 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=11");
if ($sec12 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=12");
if ($sec13 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=13");
if ($sec14 == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=14");
?>

Die $sec1 t/m $sec14 corresponderen met de checkboxen op 't form. De tabel 'sectieleden' bindt ahw. de personen aan de secties. Maar dit knaagt... :r Dit stuk code SCHREEWT om optimalisering, maar ik kom er niet zo snel uit.

Heeft iemand enig idee hoe dit beter is aan te pakken? Als bv. iemand lid is van 3 secties, worden 4 queries uitgevoerd (de delete + 3 inserts). Is het mogelijk om het aantal db-queries terug te brengen naar twee ofzo?

[ specs ] [ Tweaker gallery ]


  • Nazgul
  • Registratie: Februari 2000
  • Laatst online: 11-10-2022

Nazgul

Digital Pizza Crew

Je voegt nu voor elke categorie een record toe.
Is het niet beter om eenmalig een comma-seperated list op te slaan, dus bijvoorbeeld:
code:
1
insert sectieleden set id_adv=$id,id_sectie='1,5,6';

En om snel zoeken mogelijk te maken kun je zelfs denken aan:
code:
1
insert sectieleden set id_adv=$id,id_sectie=',1,5,6,';

Dan kun je met een search zoeken op ,nummer, om te weten of iemand voldoet.

Wil je wel voor elke categorie een record, dan kun je je code wat optimizen door hetvolgende (Uit mijn hoofd, dus kunnen foutjes in zitten):
PHP:
1
2
3
4
5
6
7
8
<?
$result = mysql_query("delete from sectieleden where id_adv=$id");

for($count=1;$count<=14;$count++)
{
  if ($("sec".$count) == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=$count");
}
?>

No trees were killed in the sending of this message. However a large number of electrons were terribly inconvenienced.


  • Grum
  • Registratie: Juni 2001
  • Niet online
denk ik hier krom ofzo ?

maar zo te zien kan jij maar 1 checkbox tegelijk aan hebben
DUS is het simpler met een radio button structuur :)

dan heb je ook niet meer last van die erorme berg ifjes (die je bv mbv een while en variabele varnames kan wegwerken)

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

dusty

Celebrate Life!

Op woensdag 03 oktober 2001 16:33 schreef Grum_ het volgende:
denk ik hier krom ofzo ?

maar zo te zien kan jij maar 1 checkbox tegelijk aan hebben
DUS is het simpler met een radio button structuur :)

dan heb je ook niet meer last van die erorme berg ifjes (die je bv mbv een while en variabele varnames kan wegwerken)
Ligt aan jou, elke checkbox heeft zijn eigen naam.. dus zou helemaal geen probleem moeten zijn.
Je voegt nu voor elke categorie een record toe.
Is het niet beter om eenmalig een comma-seperated list op te slaan, dus bijvoorbeeld:
Nee.

En dan zullen we maar aardig zijn >:)
PHP:
1
2
3
4
5
6
7
8
<?
$result = mysql_query("delete from sectieleden where id_adv=$id");

for ($t=1;$t<=14;$t++) {
  $naam="sec$t";
  if ($$naam == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=$t");
}
?>

Beetje beter te onderhouden :)

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


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

dusty

Celebrate Life!

Als je je database model niet slechter wilt maken is het inderdaad NIET met minder queries te doen.

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


  • Grum
  • Registratie: Juni 2001
  • Niet online
Op woensdag 03 oktober 2001 17:01 schreef dusty het volgende:
Als je je database model niet slechter wilt maken is het inderdaad NIET met minder queries te doen.
slechter ? :P

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

dusty

Celebrate Life!

* dusty chants "I won't flame, I won't flame, I won't flame"

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


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Op woensdag 03 oktober 2001 16:59 schreef dusty het volgende:
PHP:
1
2
3
4
5
6
7
8
<?
$result = mysql_query("delete from sectieleden where id_adv=$id");

for ($t=1;$t<=14;$t++) {
  $naam="sec$t";
  if ($$naam == 'on') mysql_query("insert sectieleden set id_adv=$id,id_sectie=$t");
}
?>

Beetje beter te onderhouden :)
Aardig. Iets dergelijks had ik ook wel in gedachte, maar ik vroeg me af of het niet mogelijk zou zijn om van te voren na te gaan welke checkboxen aan staan en dan met slechts 1 insert-query de verschillende records in de db toe te voegen. Niet mogelijk waarschijnlijk, tenzij ik inderdaad de db aanpas en zo maak wat Nazgul suggereerde. Duh! |:(

[ specs ] [ Tweaker gallery ]


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

dusty

Celebrate Life!

Op vrijdag 05 oktober 2001 14:47 schreef Explore het volgende:
Aardig. Iets dergelijks had ik ook wel in gedachte, maar ik vroeg me af of het niet mogelijk zou zijn om van te voren na te gaan welke checkboxen aan staan en dan met slechts 1 insert-query de verschillende records in de db toe te voegen. Niet mogelijk waarschijnlijk, tenzij ik inderdaad de db aanpas en zo maak wat Nazgul suggereerde. Duh! |:(
Je kan een query uitvoeren om te kijken welke waarden in de database staan en dan de veranderingen doorvoeren.. kijken welke aan staan in de database die uit moeten (die kan je in een keer verwijderen..) en dan elke die aangezet moet worden (die uitstonden) moet elk in een aparte query.

Overzichtelijkheid van het programma wordt dan wel een stuk onduidelijker.

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

Pagina: 1