Toon posts:

[SQL/MySQL]Select en Update op zelfde tabel niet toegestaan

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een tabel:
code:
1
2
3
4
5
6
Field     Type
--------  ------------
objectid  varchar(10)
parent    varchar(10)
name      varchar(255)
childs    int(11)


Parent geeft aan welk objectid de parent is
Name is een vrije naam
Childs geeft aan hoeveel kindjes dit object heeft.

Nu wil ik de childs waarde gaan updaten, en ik had daarvoor de volgende query in gedachte:
SQL:
1
update temp set childs=(select Count(*) from temp where parent='01') where objectid='01'

Maar die wordt dus afgekeurd door MySQL met de melding dat SELECT en UPDATE op dezelfde tabel niet zijn toegestaan.

Maar ik heb iets van... ik wil dat wel door de DBMS laten uitrekenen enzo.. iemand suggesties hoe ik dit toch in 1 query voor elkaar kan krijgen?

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Het je die childs waarde wel echt nodig? Je kunt toch bij het ophalen van de data die waarde gewoon uitrekenen lijkt me? Anders zul je het toch echt in meerdere stappen moeten gaan doen.

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
Ja, die waarde heb ik echt nodig.

Het toevoegen van een item duurt dan wat langer, maar dat toevoegen gebeurd enkele keren per dag (hooguit)

Het opvragen van de gegevens gaat veel sneller, en dat gebeurd enkele keren per minuut.

Het is bedoeld om een menu recursief op te bouwen, en als ik weet hoeveel kindjes iemand heeft, hoef ik vervolgens geen query meer te doen met de vraag of er iemand is die dit object als parent heeft.

En aangezien er enkele honderden items in een menu kunnen staan, scheelt dat evenzoveel queries.

  • Sybr_E-N
  • Registratie: December 2001
  • Nu online
Als ik de MySQL documentatie er op na sla kom ik tot de conlusie dat je het echt in meerdere stappen zult moeten oplossen. Dus eerst een count en daarna de betreffende row updaten.

(Btw, waarom wil je die #childs opslaan in de database, is daar een reden voor? Je kunt het ook gewoon elke keer berekenen al dan niet door een (script)taal niet zozeer sql zelf, bijvoorbeeld als je de rows fetch kun je ze gewoon tellen.)

[ Voor 7% gewijzigd door Sybr_E-N op 07-04-2005 15:31 ]


Verwijderd

Topicstarter
De backend kan gegevens toevoegen aan de database, en een van de stappen die dan gebeurd is het updaten van de childs tabel.

Het opvragen moet gewoon zo snel mogelijk gebeuren.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Dan worden het toch meerdere stappen dus. Is dat echt een probleem dan? Lijkt me dat het updaten niet zo vaak gebeurt?

Noushka's Magnificent Dream | Unity


Verwijderd

Je wint volgens mij meer snelheid door je PK en FK char te maken i.p.v. varchar. Dat vinden je indexen een stuk prettiger...
SQL:
1
2
3
4
select objectid, parent, name,
       (select count(*) from temp a where a.parent = temp.objectid) as childs
from temp
enz...

Zou best rap moeten werken. Kan ik hier nu niet testen, want ik heb geen MySQL bij de hand.
Pagina: 1